<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0cEQHk8fCp7ImA9WhVUEUk.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163</id><updated>2012-05-16T02:16:41.774-04:00</updated><title>Python Insider</title><subtitle type="html">Python core development news and information.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.python.org/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.python.org/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Doug Hellmann</name><uri>http://www.blogger.com/profile/01892352754222143463</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_--Fv8pzwveE/TUqnh9CVaTI/AAAAAAAAAWs/Z5gcLDnoegA/s220/book-smaller.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/PythonInsider" /><feedburner:info uri="pythoninsider" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>PythonInsider</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;CEINRHs5cCp7ImA9WhVSF0U.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-8622102854864570782</id><published>2012-03-14T10:05:00.000-04:00</published><updated>2012-03-14T23:36:35.528-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-14T23:36:35.528-04:00</app:edited><title>2012 Language Summit Report</title><content type="html">&lt;div class="document" id="language-summit-report"&gt;
This year's Language Summit took place on Wednesday March 7 in Santa Clara, CA before the start of &lt;a class="reference external" href="https://us.pycon.org/2012/"&gt;PyCon 2012&lt;/a&gt;. As with previous years, in attendance were members of the various Python VMs, packagers from various Linux distributions, and members of several community projects.&lt;br /&gt;&lt;br /&gt;
&lt;div class="section" id="the-namespace-peps"&gt;
&lt;h4&gt;
The Namespace PEPs&lt;/h4&gt;
The summit began with a discussion on PEPs &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0382/"&gt;382&lt;/a&gt; and &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0402/"&gt;402&lt;/a&gt;, with Barry Warsaw leading much of the discussion. After some discussion, the decision was ultimately deferred with what appeared to be a want for parts of both PEPs.&lt;br /&gt;
&lt;br /&gt;
As of Monday at the PyCon sprints, both PEPs have been rejected (see the Rejection Notice at the top of each PEP). Martin von Loewis &lt;a class="reference external" href="http://mail.python.org/pipermail/import-sig/2012-March/000421.html"&gt;posted to the import-sig list&lt;/a&gt; that a resolution has been found and Eric Smith will draft a new PEP on the ideas agreed upon there. Effectively, PEP 382 has been outright rejected, while portions of PEP 402 will be accepted.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="importlib-status"&gt;
&lt;h4&gt;
&lt;tt class="docutils literal"&gt;importlib&lt;/tt&gt; Status&lt;/h4&gt;
Brett Cannon announced that there is a completed and available branch of CPython using importlib at &lt;a class="reference external" href="http://hg.python.org/sandbox/bcannon/"&gt;http://hg.python.org/sandbox/bcannon/&lt;/a&gt;. See the &lt;tt class="docutils literal"&gt;bootstrap_importlib&lt;/tt&gt; named branch.&lt;br /&gt;
&lt;br /&gt;
Discussion began by outlining the only real existing issue, which lies in &lt;tt class="docutils literal"&gt;stat&lt;/tt&gt;'ing of directories. There's a minor backwards incompatibility issue with time granularity. However, everyone agreed that it's so unlikely to be of issue that it's not a showstopper and the work can move forward. Additionally, there was an optimization made around the &lt;tt class="docutils literal"&gt;stat&lt;/tt&gt; calls, which was arrived at independently by each of Brett, Antoine Pitrou, and P.J. Eby.&lt;br /&gt;
&lt;br /&gt;
The topic of performance came up and Brett explained that the current pure-Python implementation is around 5% slower. Thomas Wouters exclaimed that 5% slower is actually really good, especially given some recent benchmark work he was doing showing that changing compilers sometimes shows a 5% difference in startup time. There was a shared feeling that 5% slower was not something to hold up integration of the code, which pushed discussion happily along.&lt;br /&gt;
&lt;br /&gt;
Brett went on to explain what the bootstrapping actually looks like, even asserting that the implementation finds what could be the first &lt;em&gt;real&lt;/em&gt; use of frozen modules! Guido's first response was, "you mean to tell me that after 20 years we finally found a use for freezing code?"&lt;br /&gt;
&lt;br /&gt;
&lt;tt class="docutils literal"&gt;importlib._bootstrap&lt;/tt&gt; is a frozen module containing the necessary builtins to operate, along with some re-implementations of a small number of functions. Some of the libraries included in the frozen module are &lt;tt class="docutils literal"&gt;warnings&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;_os&lt;/tt&gt; (select code from &lt;tt class="docutils literal"&gt;posix&lt;/tt&gt;), and &lt;tt class="docutils literal"&gt;marshal&lt;/tt&gt;.&lt;br /&gt;
&lt;br /&gt;
Another compatibility issue was brought up, but again, was decided to be an issue unworthy of halting the progress on this issue. There's a negative level count which is not supported in &lt;tt class="docutils literal"&gt;importlib&lt;/tt&gt;, used in implicit relative imports, and it was agreed that it's acceptable to continue not supporting it.&lt;br /&gt;
&lt;br /&gt;
The future will likely result in a strip down of &lt;tt class="docutils literal"&gt;import.c&lt;/tt&gt;, as well as the exposure of numerous hooks as well as exposure of much of the &lt;tt class="docutils literal"&gt;importlib&lt;/tt&gt; API.&lt;br /&gt;
&lt;br /&gt;
As for merging with the &lt;tt class="docutils literal"&gt;default&lt;/tt&gt; branch, it was pretty universally agreed upon that this should happen for 3.3 and it should happen soon in order to get mileage on the implementation throughout the alpha and beta cycles. Since this will be happening shortly, Brett is going to follow-up to python-dev with some cleanup details and look for reviews.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="release-schedule-peps"&gt;
&lt;h4&gt;
Release Schedule PEPs&lt;/h4&gt;
Discussion on PEPs &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0407/"&gt;407&lt;/a&gt; and &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0413/"&gt;413&lt;/a&gt; followed the &lt;tt class="docutils literal"&gt;importlib&lt;/tt&gt; talk. Like the namespace PEP discussion, several ideas were tossed around but the group didn't arrive at any conclusion on acceptability of the PEPs.&lt;br /&gt;
&lt;br /&gt;
Immediately, the idea of splitting out the standard library to be on its own was resurrected, which could lend itself to both PEPs. Some questions remain, namely in where would the test suite live. Additionally, there may need to be some distinction between the tests which cover standard libraries versus the tests which cover language features.&lt;br /&gt;
&lt;br /&gt;
The topic of versioning came up, with three distinctions needing to be made. We would seem to need a version of the language spec, a version of the implementation, and a version of the standard library.&lt;br /&gt;
&lt;br /&gt;
Many commenters mentioned that these PEPs make things too complicated. Additionally, there was a question about whether there are enough users who care about either of these changes being made. Several of us stated that &lt;em&gt;we&lt;/em&gt; could use the quicker releases, but with so many users being stuck on old versions for one reason or another, there was a wonder of who would take the releases.&lt;br /&gt;
&lt;br /&gt;
Thomas Wouters mentioned a good point about the difficulty in lining up the so-called Python "LTS" releases with other Python consumers who do similar LTS-style releases. Ubuntu and their LTS schedule was a prime example, as well as the organizations who plan releases atop something like Ubuntu. Many of the Linux distribution packagers in attendance seemed to agree.&lt;br /&gt;
&lt;br /&gt;
One thing that seemed to have broad agreement was that shortening the standard library turnaround time would be a good thing in terms of new contributors. Few people are interested in writing new features that might not be released for over a year -- it's just not fun. Even with bug fixes, sometimes the duration can be seen as too long, to the point where users may end up just fixing our problems from within their own code if possible.&lt;br /&gt;
&lt;br /&gt;
Guido went on to make a comment about how we hope to avoid the mindset some have of "my package isn't accepted until it's in the standard library". The focus continues to be on projects being hosted on PyPI, being successful out in the wild, then vetted for acceptance in the standard library after maturity of the project and its APIs.&lt;br /&gt;
&lt;br /&gt;
It was suggested that perhaps speeding up bug fix releases could be a good move, but we would need to check with release managers to ensure they're on board and willing to expend the effort to produce more frequent releases. As with the new feature releases, we need to be sure there's an audience to take the new bug fixes.&lt;br /&gt;
&lt;br /&gt;
There was also some discussion about what have previously been called "sumo" releases. Given that some similar releases are already made by third-party vendors, the idea didn't seem to gain much traction.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="funding-from-the-python-software-foundation"&gt;
&lt;h4&gt;
Funding from the Python Software Foundation&lt;/h4&gt;
PSF Chairman Steve Holden joined the group after lunch to mention that the foundation has resources available to assist development efforts, especially given the sponsorship success of this year's conference. While the foundation can't and won't dictate what should be coded up, they're open to proposals about the types of work to be funded.&lt;br /&gt;
&lt;br /&gt;
Steve and Jesse Noller were adamant about the support not only being for all Python implementations, but also for third-party projects. What's needed to begin funding for a project is a concrete proposal on what will be accomplished. They stressed that the money is ready and waiting -- proposals are the way to unlock it.&lt;br /&gt;
&lt;br /&gt;
Some ideas for how to use the funding came from Steve but also from around the room. One idea which started off the discussion was the idea of funding one-month sabbaticals. Then comes the issue of who might be available. Some suggested that freelance consultants in the development community might be the ones we should try to engage. Those with full-time employment may find it harder to acquire such a sabbatical, but the possibility is open to anyone.&lt;br /&gt;
Another thought was potential funding of someone to do spurts of full-time effort on the bug tracker, ideally someone already involved in the triage effort. This type of funding would hope to put an end to the times when it takes three days to fix a bug and three years for the patch to be accepted. Some thought this might be a nice idea in the short term, but it could be tough work and burn out the individual(s) involved. If anyone is up for it, they're encouraged to propose the idea to the foundation.&lt;br /&gt;
&lt;br /&gt;
Along similar lines of tracker maintenance, Glyph Lefkowitz of the Twisted project had an idea to fund code reviews over code-writing efforts. Some thought this might be a good way to push forward the &lt;tt class="docutils literal"&gt;regex&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;re&lt;/tt&gt; situation, given that the &lt;tt class="docutils literal"&gt;regex&lt;/tt&gt; is very large and most felt that the only thing holding it back from some form of inclusion is an in-depth review. The &lt;tt class="docutils literal"&gt;cdecimal&lt;/tt&gt; module was mentioned as another project that could use some review assistance.&lt;br /&gt;
&lt;br /&gt;
The code review funding is also an idea to push forward some third-party project's ports to Python 3, specifically including Twisted, which the group felt was an effort which should receive some of this funding.&lt;br /&gt;
&lt;br /&gt;
Along the way it was remarked that the &lt;a class="reference external" href="http://pythonmentors.com/"&gt;core-mentors&lt;/a&gt; group has been a success in involving new contributors. Kudos to those involved with that list.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="virtualenv-inclusion"&gt;
&lt;h4&gt;
&lt;tt class="docutils literal"&gt;virtualenv&lt;/tt&gt; Inclusion&lt;/h4&gt;
In about two minutes, discussion on PEP &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0405/"&gt;405&lt;/a&gt; came and went. Carl Meyer mentioned that a reference implementation is available and is working pretty well. A look from the OSX maintainers would be beneficial, and both Ned Deily and Ronald Oussoren were in attendance. It seemed like one of the only things left in terms of the PEP was to find someone to make a declaration on it, and Thomas Wouters put his name out there if Nick Coghlan wasn't going to do t (update: Nick will be the PEP czar).&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="pep-397-inclusion"&gt;
&lt;h4&gt;
PEP 397 Inclusion&lt;/h4&gt;
Without much of a Windows representation at the summit, discussion was fairlyquick, but it was pretty much agreed that PEP &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0397/"&gt;397&lt;/a&gt; was something we should accept. Brian Curtin spoke in favor of the PEP, as well as mentioning ongoing work on the Windows installer to optionally add the executable's directory to the Path.&lt;br /&gt;
&lt;br /&gt;
After discussion outside of the summit, it was additionally agreed upon that the launcher should be installed via the 3.3 Windows installer, while it can also live as a standalone installer for those not taking 3.3. Additionally, there needs to be some work done on the PEP to remove much of the low-level detail that is coupled too tightly with the implementation, e.g., explaining of the location of the &lt;tt class="docutils literal"&gt;py.ini&lt;/tt&gt; file.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="speed-python-org"&gt;
&lt;h4&gt;
speed.python.org&lt;/h4&gt;
After generous hardware donations, the &lt;a class="reference external" href="http://speed.python.org/"&gt;http://speed.python.org&lt;/a&gt; site has gone live and is currently running PyPy benchmarks. We need to make a decision on what benchmarks can be used as well as what benchmarks &lt;em&gt;should&lt;/em&gt; be used when it comes to creating a Python 3 suite. As we get implementations on Python 3 we'll want to scale back 2.7 testing and push forward with 3.x.&lt;br /&gt;
&lt;br /&gt;
The project suffers not from a technological problem but from a personnel problem, which was thought to be another area that funding could be used for. However, even if money is on the table, we still need to find someone with the time, the know-how, and the drive to complete the task. Ideally the starting task would be to get PyPy and CPython implementations running and comparing. After that, there are a number of infrastructure tasks in line.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="pep-411-inclusion"&gt;
&lt;h4&gt;
PEP 411 Inclusion&lt;/h4&gt;
PEP &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0411/"&gt;411&lt;/a&gt; proposes the inclusion of provisional packages into the standard library. The recently discussed &lt;tt class="docutils literal"&gt;regex&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;ipaddr&lt;/tt&gt; modules were used as examples of libraries to include under this PEP. As for how this inclusion should be implemented and denoted to users was the major discussion point.&lt;br /&gt;
&lt;br /&gt;
It was first suggested that documentation notes don't work -- we can't rely only on documentation to be the single notification point, especially for this type of code inclusion. Other thoughts were some type of flag on the library to specify its experimental status. Another thought was to emit a warning on import of a provisional library, but it's another thing that we'd likely want to silence by default in order to not affect user code in the hopes that developers are running their test suite with warnings enabled. However, as with other times we've gone down this path, we run the risk of developers just disabling warnings all together if they become annoying.&lt;br /&gt;
&lt;br /&gt;
As has been suggested on python-dev, importing a provisional library from a special package, e.g., &lt;tt class="docutils literal"&gt;from __experimental__ import foo&lt;/tt&gt;, was pretty strongly discouraged. If the library gains a consistent API, it penalizes users once it moves from provisional status to being officially accepted. Aliasing just exacerbates the problem.&lt;br /&gt;
&lt;br /&gt;
The PEP boils down to being about process, and we need to be sure that libraries being included use the ability to change APIs very carefully. We also need to make people, especially the library author, aware of the need to be responsive to feedback and open to change as the code reaches a wider audience.&lt;br /&gt;
&lt;br /&gt;
Looking back, Jesse Noller suggested &lt;tt class="docutils literal"&gt;multiprocessing&lt;/tt&gt; would have been a good candidate for something like this PEP is suggesting. Around this time, it was suggested that Michael Foord's &lt;a class="reference external" href="http://www.voidspace.org.uk/python/mock/"&gt;mock&lt;/a&gt; could gain some provisional inclusion within &lt;tt class="docutils literal"&gt;unittest&lt;/tt&gt;, perhaps as &lt;tt class="docutils literal"&gt;unittest.mock&lt;/tt&gt;. Instead, given &lt;tt class="docutils literal"&gt;mock&lt;/tt&gt;'s stable API and wide use among us, along with the need for a mocking library within our own test suite, it was agreed to just accept it directly into the standard library without any provisional status.&lt;br &gt;
&lt;br /&gt;
While on the topic of ``regex``'s role within the PEP came an idea from Thomas Wouters that ``regex`` be introduced into the standard library, bypassing any provisional status. From there, the previously known ``re`` module could be moved to the ``sre`` name, and there didn't appear to be any dissenting opinion there.&lt;br /&gt;
&lt;br /&gt;
It should also be noted to users of provisional libraries that the library maintainers would need to exercise extreme care and be very conservative in changing of the APIs. The last thing we want to do is introduce a good library but as a moving target to its users.&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="keyword-arguments-on-all-builtin-functions"&gt;
&lt;h4&gt;
Keyword Arguments on all builtin functions&lt;/h4&gt;
As recently came up on the tracker, it was suggested that wider use of keyword arguments in our APIs would likely be a good thing. Gregory P. Smith suggested that we leave single-argument APIs alone, which was agreed upon. However, the overall change got some push back as "change for change's sake".&lt;br /&gt;
&lt;br /&gt;
In order to support this, the &lt;tt class="docutils literal"&gt;PyArg_ParseTuple&lt;/tt&gt; function would need to do more work, and it's already known to be somewhat slow. Alternatively, &lt;tt class="docutils literal"&gt;PyArg_Parse&lt;/tt&gt; is much faster, and the tuple version could take a thing or two from it regardless of any wide scale change to builtins.&lt;br /&gt;
&lt;br /&gt;
There does exist some potential break in compatibility when replacing a builtin function with a Python one, where positional-only arguments suddenly get a potentially conflicting name.&lt;br /&gt;
&lt;br /&gt;
It was widely agreed upon that we should avoid any blanket rules and keep changes to places where it makes sense rather than make wholesale changes. We also need to be mindful of documentation and doc strings being kept to match the actual keyword argument names as well as keep them in sync.&lt;br /&gt;
&lt;br /&gt;
OrderedDict was suggested as the container for keyword arguments, but Guido and Gregory were unsure of use-cases for that. Whether or not we use a traditional or ordered dictionary, it was suggested that we could possibly use a decorator to handle some of this. We could even go as far as exposing something like &lt;tt class="docutils literal"&gt;PyArg_ParseTuple&lt;/tt&gt; as a Python-level function.&lt;br /&gt;
&lt;br /&gt;
PEP &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0362/"&gt;362&lt;/a&gt;, a proposal for a function signature object, would help here and with decorators in general. It seems that all that's left with that PEP is another look and someone to declare on it.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="porting-to-python-3"&gt;
&lt;h4&gt;
Porting to Python 3&lt;/h4&gt;
We moved on to talk about Python 3 porting, starting with the current strategies and how they're working out. Single-codebase porting is working better than expected for most of us, although &lt;tt class="docutils literal"&gt;except&lt;/tt&gt; handling is a bit messy when supporting versions like 2.4. Having a lot of options, from 3to2 to 2to3, then the single codebase through parallel trees, is a really good thing. However, it's hard for us to choose a strategy for projects, so we don't, which is why most documentation tries to lay numerous strategies out there.&lt;br /&gt;
&lt;br /&gt;
It was suggested that documentation could stand to gain more examples of real-world porting examples, ideally pointing to changesets of these projects. The thought of our porting documentation gaining a cookbook-style approach seemed to get some agreement as a good idea.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="hash-randomization"&gt;
&lt;h4&gt;
Hash Randomization&lt;/h4&gt;
Release candidates are available to all branches receiving security fixes, and in the meantime, David Malcolm found and reported a security issue in the upstream &lt;tt class="docutils literal"&gt;expat&lt;/tt&gt; project. However, since the upstream fix includes many other fixes at the same time, we should pick up only the security fix at this time and leave the bug fixes for the next bug fix release of the relevant branches.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="new-dict-implementation"&gt;
&lt;h4&gt;
New &lt;tt class="docutils literal"&gt;dict&lt;/tt&gt; Implementation&lt;/h4&gt;
Since the implementation makes sense and the tests pass, it was quickly agreed upon that Mark Shannon's PEP &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0412/"&gt;412&lt;/a&gt; should be accepted. As with other changes agreed upon in this summit, we'd like for the change to be pushed soon in order to get mileage on it throughout the alpha and beta cycles. With this acceptance comes commit access for Mark so that he can maintain the code.&lt;br /&gt;
&lt;br /&gt;
It was also remarked that the only user-visible difference that this implementation brings is a difference in sort ordering, but the recent hash randomization work makes this a moot point.&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="section" id="new-pickle-protocol"&gt;
&lt;h4&gt;
New &lt;tt class="docutils literal"&gt;pickle&lt;/tt&gt; Protocol&lt;/h4&gt;
PEP &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-3154/"&gt;3154&lt;/a&gt;, mentioned by Lukasz Langa, specifies a new pickle protocol -- version 4. Lukasz mentioned exception pickling in &lt;tt class="docutils literal"&gt;multiprocessing&lt;/tt&gt; as being an issue, and Antoine solved it with this PEP. While qualified names provide some help, it was agreed upon that this PEP needs more attention.&lt;br /&gt;
&lt;hr class="docutils" /&gt;
&lt;br /&gt;
If you have any questions or comments, please post to &lt;a class="reference external" href="http://mail.python.org/mailman/listinfo/python-dev"&gt;python-dev&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Thanks to Eric Snow and Senthil Kumaran for contributing to this post.&lt;/em&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-8622102854864570782?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZLaHCD80z5E:ySbBd-izDGM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZLaHCD80z5E:ySbBd-izDGM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ZLaHCD80z5E:ySbBd-izDGM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZLaHCD80z5E:ySbBd-izDGM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ZLaHCD80z5E:ySbBd-izDGM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZLaHCD80z5E:ySbBd-izDGM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ZLaHCD80z5E:ySbBd-izDGM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZLaHCD80z5E:ySbBd-izDGM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/ZLaHCD80z5E" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8622102854864570782?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8622102854864570782?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/ZLaHCD80z5E/2012-language-summit-report.html" title="2012 Language Summit Report" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2012/03/2012-language-summit-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcFQnY6fyp7ImA9WhdXEUQ.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-5936093913265067028</id><published>2011-08-24T09:53:00.001-04:00</published><updated>2011-08-24T09:53:33.817-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-24T09:53:33.817-04:00</app:edited><title>Meet the Team: Brett Cannon</title><content type="html">&lt;div class="document" id="meet-the-team-brett-cannon"&gt;
&lt;p&gt;&lt;em&gt;This post is part of the &amp;quot;Meet the Team&amp;quot; series of posts, which is meant to give a brief introduction to the Python core development team.&lt;/em&gt;&lt;/p&gt;
&lt;table class="docutils field-list" frame="void" rules="none"&gt;&lt;col class="field-name"&gt;&lt;/col&gt;&lt;col class="field-body"&gt;&lt;/col&gt;&lt;tbody valign="top"&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Name:&lt;/th&gt;&lt;td class="field-body"&gt;Brett Cannon&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Location:&lt;/th&gt;&lt;td class="field-body"&gt;San Francisco, CA, USA&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Home Page:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="https://profiles.google.com/bcannon"&gt;https://profiles.google.com/bcannon&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Blog:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="http://sayspy.blogspot.com"&gt;http://sayspy.blogspot.com&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;How long have you been using Python?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since the fall of 2000&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you been a core committer?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since April 2003 (shortly after PyCon 2003).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did you get started as a core developer? Do you remember your first commit?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I became a core developer thanks to incessantly bugging people to commit patches for me (a trick that doesn't quite work as well as it used to; perk of getting in before Python's popularity spikein 2003/2004). Starting in August 2002 I revitalized the Python-Dev Summaries (which lasted for about 2.5 years). While writing the Summaries I would fairly regularly pick up on little issues that needed fixing. Since I was already talking on python-dev fairly regularly I simply asked folks to check my patches and commit them for me. One day Guido just asked why I didn't commit myself, I said I didn't have commit rights, and then he more or less said &amp;quot;you do now&amp;quot;.&lt;/p&gt;
&lt;p&gt;As for my first commit (changeset 28686), it was fixing some string escapement in time.strptime() (which happens to be my first contribution to Python itself).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which parts of Python are you working on now?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I typically focus on the import machinery and making the Python language work well across all VMs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do with Python when you aren't doing core development work?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I managed to use Python a little bit in my PhD thesis by implementing some server-side stuff in Python. Otherwise all of my personal projects use Python as much as possible. And my future job at Google is going to be mostly in Python.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do when you aren't programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm somewhat of a movie junkie with selective bits of TV tossed in (losing my television in the summer of 2000 to a heat wave was one of the best things that ever accidentally happened to me; marrying my wife has been the best thing I did on purpose =). Otherwise I read a lot; mostly magazines and websites, but with some book always under progress.&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-5936093913265067028?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=TfQ5Aqj0liU:SIyoG2wHDSA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=TfQ5Aqj0liU:SIyoG2wHDSA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=TfQ5Aqj0liU:SIyoG2wHDSA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=TfQ5Aqj0liU:SIyoG2wHDSA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=TfQ5Aqj0liU:SIyoG2wHDSA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=TfQ5Aqj0liU:SIyoG2wHDSA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=TfQ5Aqj0liU:SIyoG2wHDSA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=TfQ5Aqj0liU:SIyoG2wHDSA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/TfQ5Aqj0liU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/5936093913265067028?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/5936093913265067028?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/TfQ5Aqj0liU/meet-team-brett-cannon.html" title="Meet the Team: Brett Cannon" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/08/meet-team-brett-cannon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ENRnk4cSp7ImA9WhdRGE0.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-3113232503124211321</id><published>2011-08-08T09:09:00.000-04:00</published><updated>2011-08-08T09:21:37.739-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-08T09:21:37.739-04:00</app:edited><title>Meet the Team: Michael Foord</title><content type="html">&lt;div class="document" id="meet-the-team-michael-foord"&gt;
&lt;p&gt;&lt;em&gt;This post is part of the &amp;quot;Meet the Team&amp;quot; series of posts, which is meant to give a brief introduction to the Python core development team.&lt;/em&gt;&lt;/p&gt;
&lt;table class="docutils field-list" frame="void" rules="none"&gt;&lt;col class="field-name"&gt;&lt;/col&gt;&lt;col class="field-body"&gt;&lt;/col&gt;&lt;tbody valign="top"&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Name:&lt;/th&gt;&lt;td class="field-body"&gt;Michael Foord&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Location:&lt;/th&gt;&lt;td class="field-body"&gt;Northampton UK&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Home Page:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="http://www.voidspace.org.uk/"&gt;http://www.voidspace.org.uk/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;How long have you been using Python?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I first started using Python as a hobby in 2002. I started using Python full time for work in 2006. When I started programming with Python it was with a group of guys who wanted to write a program to aggregate information from a Play By Email game. None of us had done any programming for a while and we had just decided on using Smalltalk when someone suggested we try Python. I quickly fell in love with Python.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you been a core committer?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I became a core-committer at PyCon in 2009. It was originally because of my involvement with IronPython.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did you get started as a core developer? Do you remember your first commit?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;During the PyCon 2009 sprints I worked with Gregory Smith, another core developer, to incorporate some improvements to unittest contributed by Google.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which parts of Python are you working on now?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After the initial work on unittest at the PyCon sprint I took on fixing other issues and making improvements to unittest, which was without a maintainer. I became the maintainer of unittest but also contribute to other parts of the standard library.&lt;/p&gt;
&lt;p&gt;I'm involved in supporting Python in various other minor ways, such as looking after Planet Python, being a PSF member, helping out on the python.org webmaster alias and so on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do with Python when you aren't doing core development work?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For my day job I do web development for Canonical. I work on some of the web services infrastructure around the Canonical websites and also some of the services that integrate with Ubuntu itself. That's good fun and its a great team.&lt;/p&gt;
&lt;p&gt;In my spare time I work on projects like &lt;a class="reference external" href="http://pypi.python.org/pypi/unittest2"&gt;unittest2&lt;/a&gt; (a backport of the improvements of unittest for other platforms), &lt;a class="reference external" href="http://pypi.python.org/pypi/mock"&gt;mock&lt;/a&gt; (a testing library that provides mock objects and support for monkey patching in tests) and a whole bunch of other smaller stuff.&lt;/p&gt;
&lt;p&gt;I'd like to write more, but having devoted the best part of two years to writing IronPython in Action I doubt I'll take on any large writing projects soon.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do when you aren't programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm very involved in a church in Northampton (UK), which takes a lot of my time and I help with administration for a charity we run. This is one reason why working for Canonical is good - I can work from home and having put my roots down here I won't move anywhere else (I certainly don't stay for the weather). Needless to say there isn't much Python programming happening in Northampton. My first full time programming gig was with an amazing team in London, which was a two hour door to door commute each way. I managed four years of that, and really enjoyed the job, but having escaped the commute I'm not likely to ever go back.&lt;/p&gt;
&lt;p&gt;I also enjoy gaming on the XBox. Unfortunately if I find a game I like I can get sucked into it for weeks so I have to be careful. I've avoided world of warcraft and eve online for this reason... I also organise a monthly geek meet in Northampton. There aren't enough Python programmers for a Python user group but we have a good collection of geeks of all sorts. We normally just get together in a pub and chew the fat or show off our latest gadgets.&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-3113232503124211321?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=szWrurZ-wqo:4pbNUjG7kzo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=szWrurZ-wqo:4pbNUjG7kzo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=szWrurZ-wqo:4pbNUjG7kzo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=szWrurZ-wqo:4pbNUjG7kzo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=szWrurZ-wqo:4pbNUjG7kzo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=szWrurZ-wqo:4pbNUjG7kzo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=szWrurZ-wqo:4pbNUjG7kzo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=szWrurZ-wqo:4pbNUjG7kzo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/szWrurZ-wqo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/3113232503124211321?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/3113232503124211321?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/szWrurZ-wqo/meet-team-michael-foord.html" title="Meet the Team: Michael Foord" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/08/meet-team-michael-foord.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCRns-eSp7ImA9WhdTFE0.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-2816149487301404938</id><published>2011-07-11T13:11:00.000-04:00</published><updated>2011-07-11T13:11:07.551-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T13:11:07.551-04:00</app:edited><title>A Python Launcher For Windows</title><content type="html">&lt;div class="document" id="a-python-launcher-for-windows"&gt; &lt;p&gt;Mark Hammond (author of &lt;a class="reference external" href="http://sourceforge.net/projects/pywin32/"&gt;pywin32&lt;/a&gt; and long-time supporter of Python on Windows) has written &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0397/"&gt;PEP 397&lt;/a&gt;, which describes a new launcher for Python on Windows. Vinay Sanjip (author of the standard library &lt;a class="reference external" href="http://docs.python.org/py3k/library/logging.html"&gt;logging&lt;/a&gt; module) has recently created an implementation of the launcher, downloadable from &lt;a class="reference external" href="https://bitbucket.org/vinay.sajip/pylauncher/downloads"&gt;https://bitbucket.org/vinay.sajip/pylauncher/downloads&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The launcher allows Python scripts (&lt;tt class="docutils literal"&gt;.py&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;.pyw&lt;/tt&gt; files) on Windows to specify the version of Python which should be used, allowing simultaneous use of Python 2 and 3.&lt;/p&gt;&lt;p&gt;Windows users should consider downloading the launcher and testing it, to help the Python developers iron out any remaining issues. The launcher is packaged as a standalone application, and will support currently available versions of Python. The intention is that once the launcher is finalised, it will be included as part of Python 3.3 (although it will remain available as a standalone download for users of earlier versions).&lt;/p&gt;&lt;p&gt;Two versions of the launcher are available - &lt;tt class="docutils literal"&gt;launcher.msi&lt;/tt&gt; which installs in the &lt;tt class="docutils literal"&gt;Program Files&lt;/tt&gt; directory, and &lt;tt class="docutils literal"&gt;launchsys.msi&lt;/tt&gt; which installs in Windows' &lt;tt class="docutils literal"&gt;System32&lt;/tt&gt; directory. (There are also 64-bit versions for 64-bit versions of Windows).&lt;/p&gt;&lt;div class="section" id="some-details-about-the-launcher"&gt;&lt;h4&gt;Some Details About the Launcher&lt;/h4&gt;&lt;p&gt;The full specification of the behaviour of the launcher is given in &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0397/"&gt;PEP 397&lt;/a&gt;. To summarise the basic principles:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;The launcher supplies two executables - &lt;tt class="docutils literal"&gt;py.exe&lt;/tt&gt; (the console version) and &lt;tt class="docutils literal"&gt;pyw.exe&lt;/tt&gt; (the GUI version).&lt;/li&gt;
&lt;li&gt;The launcher is registered as the handler for &lt;tt class="docutils literal"&gt;.py&lt;/tt&gt; (console) and &lt;tt class="docutils literal"&gt;.pyw&lt;/tt&gt; (GUI) file extensions.&lt;/li&gt;
&lt;li&gt;When executing a script, the launcher looks for a Unix-style &lt;tt class="docutils literal"&gt;#!&lt;/tt&gt; (shebang) line in the script. It recognises executable names &lt;tt class="docutils literal"&gt;python&lt;/tt&gt; (system default python), &lt;tt class="docutils literal"&gt;python2&lt;/tt&gt; (default Python 2 release) and &lt;tt class="docutils literal"&gt;python3&lt;/tt&gt; (default Python 3 release). The precise details can easily be customised on a per-user or per-machine basis.&lt;/li&gt;
&lt;li&gt;When used standalone, the &lt;tt class="docutils literal"&gt;py.exe&lt;/tt&gt; command launches the Python interactive interpreter. Command line switches are supported, so that &lt;tt class="docutils literal"&gt;py &lt;span class="pre"&gt;-2&lt;/span&gt;&lt;/tt&gt; launches Python 2, &lt;tt class="docutils literal"&gt;py &lt;span class="pre"&gt;-3&lt;/span&gt;&lt;/tt&gt; launches Python 3, and &lt;tt class="docutils literal"&gt;py&lt;/tt&gt; launches the default version.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class="section" id="simple-usage-instructions"&gt;&lt;h4&gt;Simple Usage Instructions&lt;/h4&gt;&lt;p&gt;When it is installed, the launcher associates itself with &lt;tt class="docutils literal"&gt;.py&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;.pyw&lt;/tt&gt; scripts. Unless you do anything else, scripts will be run using the default Python on the machine, so you will see no change. One thing you might like to do, if you use the console a lot, is to add &lt;tt class="docutils literal"&gt;.py&lt;/tt&gt; to your &lt;tt class="docutils literal"&gt;PATHEXT&lt;/tt&gt; variable so that scripts don't get executed in a separate console.&lt;/p&gt;&lt;p&gt;To specify that a script must use Python 2, simply add:&lt;/p&gt;&lt;pre class="literal-block"&gt;#!/usr/bin/env python2
&lt;/pre&gt;&lt;p&gt;as the first line of the script. (This is a Unix-compatible form. If you don't need Unix compatibility, &lt;tt class="docutils literal"&gt;#!python2&lt;/tt&gt; will do).&lt;/p&gt;&lt;p&gt;If on the other hand, you want to specify that a script must use Python 3, add:&lt;/p&gt;&lt;pre class="literal-block"&gt;#!/usr/bin/env python3
&lt;/pre&gt;&lt;p&gt;as the first line.&lt;/p&gt;&lt;p&gt;You can also start the Python interpreter using any of the following commands:&lt;/p&gt;&lt;pre class="literal-block"&gt;# Default version of Python
py
# Python 2
py -2
# Python 3
py -3
&lt;/pre&gt;&lt;p&gt;For this to work, the &lt;tt class="docutils literal"&gt;py.exe&lt;/tt&gt; executable must be on your path. This is automatic with the &lt;tt class="docutils literal"&gt;launchsys&lt;/tt&gt; version of the installer, but the install directory (&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;C:\Program&lt;/span&gt; Files\Python Launcher&lt;/tt&gt;) must be added manually to &lt;tt class="docutils literal"&gt;PATH&lt;/tt&gt; with &lt;tt class="docutils literal"&gt;launcher.msi&lt;/tt&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="further-reading"&gt;&lt;h4&gt;Further Reading&lt;/h4&gt;&lt;p&gt;The following email threads on python-dev cover some of the key discussions:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;Mark's initial announcement of the draft PEP: &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-March/109509.html"&gt;http://mail.python.org/pipermail/python-dev/2011-March/109509.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The second draft of the PEP: &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-March/109786.html"&gt;http://mail.python.org/pipermail/python-dev/2011-March/109786.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vinay's initial query about a C implementation of the launcher: &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-June/112145.html"&gt;http://mail.python.org/pipermail/python-dev/2011-June/112145.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vinay's announcement of his C implementation: &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-July/112184.html"&gt;http://mail.python.org/pipermail/python-dev/2011-July/112184.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vinay's call for testers: &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-July/112251.html"&gt;http://mail.python.org/pipermail/python-dev/2011-July/112251.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-2816149487301404938?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=1JqABSwTN5U:LfTvU-8RBmk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=1JqABSwTN5U:LfTvU-8RBmk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=1JqABSwTN5U:LfTvU-8RBmk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=1JqABSwTN5U:LfTvU-8RBmk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=1JqABSwTN5U:LfTvU-8RBmk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=1JqABSwTN5U:LfTvU-8RBmk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=1JqABSwTN5U:LfTvU-8RBmk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=1JqABSwTN5U:LfTvU-8RBmk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/1JqABSwTN5U" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/2816149487301404938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/2816149487301404938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/1JqABSwTN5U/python-launcher-for-windows_11.html" title="A Python Launcher For Windows" /><author><name>Paul Moore</name><uri>http://www.blogger.com/profile/17557923197983461835</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/07/python-launcher-for-windows_11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcNQH48fCp7ImA9WhdTE0Q.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-8754201719287553183</id><published>2011-07-11T10:20:00.000-04:00</published><updated>2011-07-11T10:21:31.074-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T10:21:31.074-04:00</app:edited><title>CPython 3.2.1 Released</title><content type="html">&lt;div class="document" id="cpython-3-2-1-released"&gt;
&lt;p&gt;On behalf of the python-dev team, release manager &lt;a class="reference external" href="http://pythonic.pocoo.org/"&gt;Georg Brandl&lt;/a&gt; has announced the final release of &lt;a class="reference external" href="http://www.python.org/download/releases/3.2.1/"&gt;CPython 3.2.1&lt;/a&gt;. Windows installers and tarballs are available as of July 10, so please consider upgrading to this release.&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference external" href="http://docs.python.org/3.2/whatsnew/3.2.html"&gt;What's New&lt;/a&gt; document lists all of the new features in 3.2, and the &lt;a class="reference external" href="http://hg.python.org/cpython/file/v3.2.1/Misc/NEWS"&gt;Misc/NEWS&lt;/a&gt; file in the source lists each bug fixed.&lt;/p&gt;
&lt;p&gt;If you find any issues with this release or any other, please report them to &lt;a class="reference external" href="http://bugs.python.org/"&gt;http://bugs.python.org/&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-8754201719287553183?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=tsieHw51jhc:G_3vQohz6Mo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=tsieHw51jhc:G_3vQohz6Mo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=tsieHw51jhc:G_3vQohz6Mo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=tsieHw51jhc:G_3vQohz6Mo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=tsieHw51jhc:G_3vQohz6Mo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=tsieHw51jhc:G_3vQohz6Mo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=tsieHw51jhc:G_3vQohz6Mo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=tsieHw51jhc:G_3vQohz6Mo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/tsieHw51jhc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8754201719287553183?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8754201719287553183?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/tsieHw51jhc/cpython-321-released.html" title="CPython 3.2.1 Released" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/07/cpython-321-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIHQHk_fCp7ImA9WhZaGUs.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-534688699588920983</id><published>2011-07-06T11:31:00.000-04:00</published><updated>2011-07-06T11:35:31.744-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-06T11:35:31.744-04:00</app:edited><title>3.2.1 Release Candidate 2 Released</title><content type="html">&lt;div class="document" id="release-candidate-2-released"&gt;
&lt;p&gt;Following up a big month of &lt;a class="reference external" href="http://blog.python.org/2011/06/june-releases-267-272-314.html"&gt;releases in June&lt;/a&gt;, the second release candidate of the 3.2.1 line &lt;a class="reference external" href="http://www.python.org/download/releases/3.2.1/"&gt;is now ready&lt;/a&gt;. Since the first release candidate on May 15, over 40 issues have been fixed. We encourage everyone to test their projects with this candidate to get one last look before the final release of 3.2.1.&lt;/p&gt;
&lt;div class="section" id="what-s-fixed"&gt;&lt;h4&gt;What's fixed?&lt;/h4&gt;
&lt;div class="section" id="i-o"&gt;&lt;h5&gt;I/O&lt;/h5&gt;
&lt;p&gt;&lt;a class="reference external" href="http://bugs.python.org/issue1195"&gt;#1195&lt;/a&gt; spent a few years witout a fix, but a simple addition to clear errors before calling &lt;tt class="docutils literal"&gt;fgets&lt;/tt&gt; solves the problem of interrupting &lt;tt class="docutils literal"&gt;sys.stdin.read()&lt;/tt&gt; with CTRL-D inside of &lt;tt class="docutils literal"&gt;input()&lt;/tt&gt;. The &lt;tt class="docutils literal"&gt;io&lt;/tt&gt; system saw a cleanup in &lt;a class="reference external" href="http://bugs.python.org/issue12175"&gt;#12175&lt;/a&gt; with the &lt;tt class="docutils literal"&gt;readall&lt;/tt&gt; method with &lt;tt class="docutils literal"&gt;None&lt;/tt&gt; being the return value on a &lt;tt class="docutils literal"&gt;read()&lt;/tt&gt; which returns &lt;tt class="docutils literal"&gt;None&lt;/tt&gt;, and a &lt;tt class="docutils literal"&gt;ValueError&lt;/tt&gt; is now raised when a file can't be opened.&lt;/p&gt;
&lt;p&gt;Although this isn't new for RC2, &lt;a class="reference external" href="http://bugs.python.org/issue11272"&gt;#11272&lt;/a&gt; is an important 3.2.1 fix to &lt;tt class="docutils literal"&gt;input()&lt;/tt&gt; on Windows - the fixing of a trailing &lt;tt class="docutils literal"&gt;\r&lt;/tt&gt;. The issue has been reported many times over and affects a many people (distutils upload command anyone?), so hopefully 3.2.1 does the trick for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="windows"&gt;&lt;h5&gt;Windows&lt;/h5&gt;
&lt;p&gt;3.2.0 brought a new feature for Windows: &lt;tt class="docutils literal"&gt;os.symlink&lt;/tt&gt; support. With that feature came &lt;a class="reference external" href="http://bugs.python.org/issue12084"&gt;#12084&lt;/a&gt;, &lt;tt class="docutils literal"&gt;os.stat&lt;/tt&gt; was improperly evaluating Windows symlinks, so the inner workings of the various &lt;tt class="docutils literal"&gt;stat&lt;/tt&gt; functions were corrected.&lt;/p&gt;
&lt;p&gt;A user noticed that &lt;tt class="docutils literal"&gt;os.path.isdir&lt;/tt&gt; was slow, and the fact that it relied on &lt;tt class="docutils literal"&gt;os.stat&lt;/tt&gt; contributed to that, especially when evaluating symlinks (which are generally twice as slow as regular files). While &lt;tt class="docutils literal"&gt;os.path.isdir&lt;/tt&gt; isn't anyone's performance bottleneck, it's called numerous times on interpreter startup so changing it in &lt;a class="reference external" href="http://bugs.python.org/issue11583"&gt;#11583&lt;/a&gt; to use &lt;tt class="docutils literal"&gt;GetFileAttributes&lt;/tt&gt; gives a tiny speedup to build on.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="subprocess"&gt;&lt;h5&gt;subprocess&lt;/h5&gt;
&lt;p&gt;Creating a &lt;tt class="docutils literal"&gt;Popen&lt;/tt&gt; object with unexpected arguments was causing an &lt;tt class="docutils literal"&gt;AttributeError&lt;/tt&gt;, but that was reported in &lt;a class="reference external" href="http://bugs.python.org/issue12085"&gt;#12085&lt;/a&gt; and was fixed by the reporter. Due to a change in 3.2.0, &lt;tt class="docutils literal"&gt;Popen&lt;/tt&gt; wasn't correctly handling empty environment variables, specifically the &lt;tt class="docutils literal"&gt;env&lt;/tt&gt; argument. &lt;a class="reference external" href="http://bugs.python.org/issue12383"&gt;#12383&lt;/a&gt; was created for the issue and was promptly fixed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="and-more"&gt;&lt;h5&gt;...and more!&lt;/h5&gt;
&lt;p&gt;For a full list of changes through 3.2.1 RC2, check out &lt;a class="reference external" href="http://hg.python.org/releasing/3.2.1/file/v3.2.1rc2/Misc/NEWS"&gt;the change log&lt;/a&gt; and &lt;a class="reference external" href="http://www.python.org/download/releases/3.2.1/"&gt;download it now&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;As always, please report any issues you find to &lt;a class="reference external" href="http://bugs.python.org"&gt;http://bugs.python.org&lt;/a&gt;. We appreciate your help in making great Python releases.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-534688699588920983?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qJVUVTi0FtY:PUk3o78ZLFA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qJVUVTi0FtY:PUk3o78ZLFA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qJVUVTi0FtY:PUk3o78ZLFA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qJVUVTi0FtY:PUk3o78ZLFA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qJVUVTi0FtY:PUk3o78ZLFA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qJVUVTi0FtY:PUk3o78ZLFA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qJVUVTi0FtY:PUk3o78ZLFA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qJVUVTi0FtY:PUk3o78ZLFA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/qJVUVTi0FtY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/534688699588920983?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/534688699588920983?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/qJVUVTi0FtY/321-release-candidate-2-released.html" title="3.2.1 Release Candidate 2 Released" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/07/321-release-candidate-2-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4NRXo6eCp7ImA9WhZbEEg.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-3330803816126009002</id><published>2011-06-14T09:08:00.001-04:00</published><updated>2011-06-14T09:09:54.410-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-14T09:09:54.410-04:00</app:edited><title>June Releases - 2.6.7, 2.7.2, 3.1.4</title><content type="html">&lt;div class="document" id="june-2011-releases"&gt;
&lt;p&gt;June is a big month for Python releases, with an update coming out of all active branches.&lt;/p&gt;
&lt;div class="section" id="id1"&gt;
&lt;h4&gt;2.6.7&lt;/h4&gt;
&lt;p&gt;A new source-only release of Python &lt;a class="reference external" href="http://www.python.org/download/releases/2.6.7/"&gt;2.6.7&lt;/a&gt; is available, providing fixes to three security issues. Now that the 2.6 line is in security-mode, these releases will happen on an as-needed basis until October 2013 in source-only form. If you require binary installers, you should consider an upgrade to 2.7 or 3.2.&lt;/p&gt;
&lt;p&gt;2.6.7 is the first release to contain a fix to the previously covered &lt;a class="reference external" href="http://blog.python.org/2011/04/urllib-security-vulnerability-fixed.html"&gt;urllib vulnerability&lt;/a&gt;. Additionally, an &lt;tt class="docutils literal"&gt;smtpd&lt;/tt&gt; DoS vulnerability (Issue &lt;a class="reference external" href="http://bugs.python.org/issue9129"&gt;#9129&lt;/a&gt;) and &lt;tt class="docutils literal"&gt;SimpleHTTPServer.list_directory&lt;/tt&gt; XSS vulnerability (Issue &lt;a class="reference external" href="http://bugs.python.org/issue11442"&gt;#11442&lt;/a&gt;) are fixed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id2"&gt;
&lt;h4&gt;2.7.2&lt;/h4&gt;
&lt;p&gt;The last minor version of the 2.x line, 2.7, received over 150 bug fixes since 2.7.1 in November 2010. &lt;a class="reference external" href="http://www.python.org/download/releases/2.7.2/"&gt;2.7.2&lt;/a&gt; source and binary installers are available as of June 12, which include the security fixes mentioned in 2.6.7.&lt;/p&gt;
&lt;p&gt;A number of crashes are fixed: a situation when Python incorrectly used non-Python managed memory while it was being modified by another thread, when deleting &lt;tt class="docutils literal"&gt;__abstractmethods__&lt;/tt&gt; from a class, accessing a memory-mapped file past its length, and several others.&lt;/p&gt;
&lt;p&gt;A fix to &lt;tt class="docutils literal"&gt;getpass&lt;/tt&gt; corrects a regression in regards to CTRL-C and CTRL-Z handling. &lt;tt class="docutils literal"&gt;multiprocessing&lt;/tt&gt; received a number of fixes, including treating Windows services like frozen executables and a correction to a race condition when terminating &lt;tt class="docutils literal"&gt;multiprocessing.Pool&lt;/tt&gt; workers. &lt;tt class="docutils literal"&gt;mmap&lt;/tt&gt; was fixed to work with file sizes and offsets larger than 4 GB even on 32-bit builds, and a &lt;tt class="docutils literal"&gt;TypeError&lt;/tt&gt; is now raised rather than segfaulting when trying to write to a non-writeable map.&lt;/p&gt;
&lt;p&gt;For a full list of changes, see &lt;a class="reference external" href="http://hg.python.org/cpython/raw-file/eb3c9b74884c/Misc/NEWS"&gt;the 2.7.2 news file&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id3"&gt;
&lt;h4&gt;3.1.4&lt;/h4&gt;
&lt;p&gt;3.1.4 is the last bug-fix release of the 3.1.x line, sending 3.1 into security-mode as the 3.2 line carries on. 3.1.4 contains over 100 bug fixes since the 3.1.3 release in November 2010. As with 2.7.2, binary installers are available as of June 12, and 3.1.4 is the first 3.x release to contain the security fixes listed in 2.6.7.&lt;/p&gt;
&lt;p&gt;3.1.4 corrects some problems with &lt;tt class="docutils literal"&gt;__dir__&lt;/tt&gt; lookups on objects, dates past 2038 in the Windows implementation of &lt;tt class="docutils literal"&gt;os.stat&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;os.utime&lt;/tt&gt;, and a number of 64-bit cleanups. The &lt;tt class="docutils literal"&gt;io&lt;/tt&gt; library saw a number of changes in returning &lt;tt class="docutils literal"&gt;None&lt;/tt&gt; when nothing was read and raising appropriate exceptions in other spots. &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; callback arguments were fixed on 64-bit Windows and a crash was also remedied.&lt;/p&gt;
&lt;p&gt;For a full list of changes, see &lt;a class="reference external" href="http://hg.python.org/cpython/raw-file/feae9f9e9f30/Misc/NEWS"&gt;the 3.1.4 news file&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="id4"&gt;
&lt;h4&gt;3.2.1&lt;/h4&gt;
&lt;p&gt;&lt;a class="reference external" href="http://www.python.org/download/releases/3.2.1/"&gt;3.2.1&lt;/a&gt; is currently in the release candidate phase, with one round already completed and a second release candidate expected soon. We would greatly appreciate 3.2 users trying out the release candidates to ensure we cover any issues you may be seeing. If you have any bugs to report, please file them on &lt;a class="reference external" href="http://bugs.python.org"&gt;bugs.python.org&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-3330803816126009002?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=Y0OHiMAU4rA:8amqCEIJod4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=Y0OHiMAU4rA:8amqCEIJod4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=Y0OHiMAU4rA:8amqCEIJod4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=Y0OHiMAU4rA:8amqCEIJod4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=Y0OHiMAU4rA:8amqCEIJod4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=Y0OHiMAU4rA:8amqCEIJod4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=Y0OHiMAU4rA:8amqCEIJod4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=Y0OHiMAU4rA:8amqCEIJod4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/Y0OHiMAU4rA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/3330803816126009002?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/3330803816126009002?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/Y0OHiMAU4rA/june-releases-267-272-314.html" title="June Releases - 2.6.7, 2.7.2, 3.1.4" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/06/june-releases-267-272-314.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkABR3wycCp7ImA9WhZVFEg.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-1571652574247676686</id><published>2011-05-26T18:44:00.009-04:00</published><updated>2011-05-26T18:59:16.298-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-26T18:59:16.298-04:00</app:edited><title>New faulthandler module in Python 3.3 helps debugging</title><content type="html">&lt;div class="document" id="new-faulthandler-module-in-python-3-3-helps-debugging"&gt;&lt;p&gt;When a user reports that your program crashes or hangs, sometimes you can only help to try and collect more information and outline a scenario to reproduce the situation. Even with a reliable user scenario, as a developer you are often unable to reproduce the situation due to environment differences, e.g., operating system and compiler. If you are lucky, the user will be able to install debug tools, but most of time you will have to wait until another person is able to obtain more information from the same situation.&lt;/p&gt;&lt;div class="section" id="fatal-errors"&gt;&lt;h4&gt;Fatal Errors&lt;/h4&gt;&lt;p&gt;A new module introduced in Python 3.3 should help this problem: &lt;a class="reference external" href="http://docs.python.org/dev/library/faulthandler.html"&gt;faulthandler&lt;/a&gt;. &lt;tt class="docutils literal"&gt;faulthandler&lt;/tt&gt; provides the ability to dump the Python traceback on a fatal error such as a segmentation fault, division by zero, abort, or bus error. You can enable it inside your application using &lt;tt class="docutils literal"&gt;faulthandler.enable()&lt;/tt&gt;, by providing the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-X&lt;/span&gt; faulthandler&lt;/tt&gt; option to the Python executable, or with the &lt;a class="reference external" href="http://docs.python.org/dev/using/cmdline.html#envvar-PYTHONFAULTHANDLER"&gt;PYTHONFAULTHANDLER=1&lt;/a&gt; environment variable. Output example:&lt;/p&gt;&lt;pre class="literal-block"&gt;Fatal Python error: Segmentation fault

Current thread 0x00007f7babc6b700:
  File "Lib/test/crashers/gc_inspection.py", line 29 in g
  File "Lib/test/crashers/gc_inspection.py", line 32 in &amp;lt;module&amp;gt;
Segmentation fault&lt;/pre&gt;&lt;/div&gt;&lt;div class="section" id="timeout"&gt;&lt;h4&gt;Timeout&lt;/h4&gt;&lt;p&gt;&lt;tt class="docutils literal"&gt;faulthandler&lt;/tt&gt; can also dump the traceback after a timeout using &lt;tt class="docutils literal"&gt;faulthandler.dump_tracebacks_later(timeout)&lt;/tt&gt;. Call it again to restart the timer or call &lt;tt class="docutils literal"&gt;faulthandler.cancel_dump_tracebacks_later()&lt;/tt&gt; to stop the timer. Output example:&lt;/p&gt;&lt;pre class="literal-block"&gt;Timeout (0:01:00)!
Current thread 0x00007f987d459700:
  File "Lib/test/crashers/infinite_loop_re.py", line 20 in &amp;lt;module&amp;gt;
&lt;/pre&gt;&lt;p&gt;Use the &lt;tt class="docutils literal"&gt;repeat=True&lt;/tt&gt; option to dump the traceback each &lt;tt class="docutils literal"&gt;timeout&lt;/tt&gt; seconds, or &lt;tt class="docutils literal"&gt;exit=True&lt;/tt&gt; to immediatly exit the program in an unsafe fashion, e.g. don't flush files.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="user-signal"&gt;&lt;h4&gt;User Signal&lt;/h4&gt;&lt;p&gt;If you have access to the host on which the program is running, you can use &lt;tt class="docutils literal"&gt;faulthandler.register(signal)&lt;/tt&gt; to install a signal handler to dump the traceback when &lt;tt class="docutils literal"&gt;signal&lt;/tt&gt; is received. On UNIX, for example, you can use the &lt;tt class="docutils literal"&gt;SIGUSR1 &lt;/tt&gt;signal: &lt;tt class="docutils literal"&gt;kill &lt;span class="pre"&gt;-USR1&lt;/span&gt; &amp;lt;pid&amp;gt;&lt;/tt&gt; will dump the current traceback. This feature is not available on Windows. Output example:&lt;/p&gt;&lt;pre class="literal-block"&gt;Current thread 0x00007fdc3da74700:
  File "Lib/test/crashers/infinite_loop_re.py", line 19 in &amp;lt;module&amp;gt;
&lt;/pre&gt;&lt;p&gt;Another possibility is to explicitly call &lt;tt class="docutils literal"&gt;faulthandler.dump_traceback()&lt;/tt&gt; in your program.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="security-issues-and-the-output-file"&gt;&lt;h4&gt;Security Issues and the Output File&lt;/h4&gt;&lt;p&gt;&lt;tt class="docutils literal"&gt;faulthandler&lt;/tt&gt; is disabled by default for security reasons, mainly because it stores the file descriptor of &lt;tt class="docutils literal"&gt;sys.stderr&lt;/tt&gt; and writes the tracebacks into this file descriptor. If &lt;tt class="docutils literal"&gt;sys.stderr&lt;/tt&gt; is closed and the file descriptor is reused, the file descriptor may be a socket, a pipe, a critical file or something else. By default, &lt;tt class="docutils literal"&gt;faulthandler&lt;/tt&gt; writes the tracebacks to &lt;tt class="docutils literal"&gt;sys.stderr&lt;/tt&gt;, but you can specify another file. For more information, see the &lt;a class="reference external" href="http://docs.python.org/dev/library/faulthandler.html#file-descriptor-issue"&gt;faulthandler documentation&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="third-party-module-for-older-python-versions"&gt;&lt;h4&gt;Third-party Module for Older Python Versions&lt;/h4&gt;&lt;p&gt;&lt;tt class="docutils literal"&gt;faulthandler&lt;/tt&gt; is also maintained as a third-party module for Python 2.5 through 3.2 &lt;cite style="font-style: normal;"&gt;&lt;a href="http://pypi.python.org/pypi/faulthandler/"&gt;on PyPI&lt;/a&gt;&lt;/cite&gt;. The major difference between the Python 3.3 module and the third-party module is the implementation of &lt;tt class="docutils literal"&gt;dump_tracebacks_later()&lt;/tt&gt;: Python 3.3 uses a thread with a timeout on a lock, whereas the third party uses &lt;tt class="docutils literal"&gt;SIGALRM&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;alarm()&lt;/tt&gt;.&lt;/p&gt;&lt;p&gt;The lock timeout, which is a new feature of Python 3.3, has a microsecond resolution. The &lt;tt class="docutils literal"&gt;alarm()&lt;/tt&gt; timer used on older versions has a resolution of one second, and the &lt;tt class="docutils literal"&gt;SIGALRM&lt;/tt&gt; signal may interrupt the current system call which will fail with an &lt;tt class="docutils literal"&gt;EINTR&lt;/tt&gt; error.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="early-success"&gt;&lt;h4&gt;Early Success&lt;/h4&gt;&lt;p&gt;The new &lt;tt class="docutils literal"&gt;faulthandler&lt;/tt&gt; module has already helped with tracking down race conditions in &lt;a href="http://www.python.org/dev/buildbot/"&gt;our buildbots&lt;/a&gt;. We hope that it will also help you in your programs.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-1571652574247676686?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qqYRL00AmXY:vzhC57CLoWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qqYRL00AmXY:vzhC57CLoWc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qqYRL00AmXY:vzhC57CLoWc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qqYRL00AmXY:vzhC57CLoWc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qqYRL00AmXY:vzhC57CLoWc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qqYRL00AmXY:vzhC57CLoWc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qqYRL00AmXY:vzhC57CLoWc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qqYRL00AmXY:vzhC57CLoWc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/qqYRL00AmXY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/1571652574247676686?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/1571652574247676686?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/qqYRL00AmXY/new-faulthandler-module-in-python-33.html" title="New faulthandler module in Python 3.3 helps debugging" /><author><name>haypo</name><uri>http://www.blogger.com/profile/14658404449913582628</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/05/new-faulthandler-module-in-python-33.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFQHgzfSp7ImA9WhZVEUg.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-8013073367967738969</id><published>2011-05-23T10:00:00.005-04:00</published><updated>2011-05-23T10:00:11.685-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T10:00:11.685-04:00</app:edited><title>The Python Core Mentorship Program</title><content type="html">&lt;div class="document" id="the-python-core-mentorship-program"&gt;

&lt;p&gt;&lt;a class="reference external" href="http://jessenoller.com/"&gt;Jesse Noller&lt;/a&gt; recently &lt;a class="reference external" href="http://jessenoller.com/2011/04/05/python-core-mentorship-up-and-running/"&gt; announced&lt;/a&gt; the formation of the &lt;em&gt;Python Core Mentorship&lt;/em&gt; program. The idea behind the program is to help programmers, including students and developers from other projects, connect with experienced contributors who serve as mentors to ease them into Python Core development.&lt;/p&gt;
&lt;div class="section" id="contributors-wanted"&gt;
&lt;h4&gt;Contributors Wanted&lt;/h4&gt;
&lt;p&gt;The mentors will help people regardless of experience level by
bringing them up to speed, answering questions, and giving guidance as
needed in a non-confrontational and welcoming way. The contributors
will receive guidance through the entire contribution process,
including discussions on the related mailing lists, the bug tracker,
Mercurial, code reviews, and much more.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="early-success"&gt;
&lt;h4&gt;Early Success&lt;/h4&gt;
&lt;p&gt;The program already has been successful, and the participants have
actively committed a number of patches. There have also been several
constructive discussions on the mailing list, helping guide people in
the right direction for a variety of issues.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="code-of-conduct"&gt;
&lt;h4&gt;Code of Conduct&lt;/h4&gt;
&lt;p&gt;The program has a code of conduct explained on the &lt;a class="reference external" href="http://pythonmentors.com/"&gt;website&lt;/a&gt; that aims to assuage concerns many new contributors have when interacting with experienced developers and mailing lists on contribution in general. Jesse and the other mentors hope that this program can act as a model for other projects long-term, not just benefiting Python-Core. They also want the program to help increase the overall diversity of the contributors to Python.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="signing-up"&gt;
&lt;h4&gt;Signing Up&lt;/h4&gt;
&lt;p&gt;The program is run via the &lt;a class="reference external" href="http://mail.python.org/mailman/listinfo/core-mentorship"&gt;mailing list&lt;/a&gt; and has a clear, concise &lt;a class="reference external" href="http://pythonmentors.com/"&gt;website&lt;/a&gt; devoted to it. If you would like to join to ask questions and begin on the path of core contribution, or even if you are an experienced developer (even experienced in Python-Core) looking to ask questions you're worried about asking on other lists, this is an excellent opportunity to jump in, ask and get your feet wet!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-8013073367967738969?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=SgkfTGCVy1c:olf4Uqq8tXk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=SgkfTGCVy1c:olf4Uqq8tXk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=SgkfTGCVy1c:olf4Uqq8tXk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=SgkfTGCVy1c:olf4Uqq8tXk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=SgkfTGCVy1c:olf4Uqq8tXk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=SgkfTGCVy1c:olf4Uqq8tXk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=SgkfTGCVy1c:olf4Uqq8tXk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=SgkfTGCVy1c:olf4Uqq8tXk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/SgkfTGCVy1c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8013073367967738969?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8013073367967738969?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/SgkfTGCVy1c/python-core-mentorship-program.html" title="The Python Core Mentorship Program" /><author><name>Mike Driscoll</name><uri>http://www.blogger.com/profile/06351908417200979114</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://2.bp.blogspot.com/_YuqSuIXsbDk/TUrG6LJZw1I/AAAAAAAAAAM/iihYrmcjolI/s220/snakehead_blue.jpg" /></author><feedburner:origLink>http://blog.python.org/2011/05/python-core-mentorship-program.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YASH09eyp7ImA9WhZWGE0.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-3126266884316474303</id><published>2011-05-19T08:45:00.000-04:00</published><updated>2011-05-19T08:45:49.363-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-19T08:45:49.363-04:00</app:edited><title>Portuguese, German, Korean, and Traditional Chinese Translations</title><content type="html">&lt;div class="document" id="portuguese-german-korean-and-traditional-chinese-translations"&gt;

&lt;p&gt;The Python Insider &lt;a class="reference external" href="http://blog.python.org/2011/05/python-insider-translation-project.html"&gt;translation project&lt;/a&gt; is continuing to grow! Today

we are launching &lt;a class="reference external" href="http://blog-pt.python.org"&gt;Portuguese&lt;/a&gt;, &lt;a class="reference external" href="http://blog-de.python.org"&gt;German&lt;/a&gt;, &lt;a class="reference external" href="http://blog-ko.python.org"&gt;Korean&lt;/a&gt;, and &lt;a class="reference external" href="http://blog-tw.python.org"&gt;Traditional

Chinese&lt;/a&gt; versions of the blog.  The translators have already started

publishing the backlog of posts. As with the other translations, these

parallel editions may lag slightly behind the original posts on

&lt;a class="reference external" href="http://blog.python.org/"&gt;Python Insider&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-3126266884316474303?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=h1jWkgV8r44:GpriJFbwgcg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=h1jWkgV8r44:GpriJFbwgcg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=h1jWkgV8r44:GpriJFbwgcg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=h1jWkgV8r44:GpriJFbwgcg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=h1jWkgV8r44:GpriJFbwgcg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=h1jWkgV8r44:GpriJFbwgcg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=h1jWkgV8r44:GpriJFbwgcg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=h1jWkgV8r44:GpriJFbwgcg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/h1jWkgV8r44" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/3126266884316474303?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/3126266884316474303?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/h1jWkgV8r44/portuguese-german-korean-and.html" title="Portuguese, German, Korean, and Traditional Chinese Translations" /><author><name>Michael Markert</name><uri>http://www.blogger.com/profile/08761481986934375758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/05/portuguese-german-korean-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8EQnY4eip7ImA9WhZXGU4.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-1898170954288770285</id><published>2011-05-09T07:00:00.001-04:00</published><updated>2011-05-09T07:00:03.832-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-09T07:00:03.832-04:00</app:edited><title>Romanian and Simplified Chinese Translations</title><content type="html">&lt;div class="document" id="romanian-and-simplified-chinese-translations"&gt;

&lt;p&gt;The Python Insider team is very excited to announce two new blogs
today.  Translators for &lt;a class="reference external" href="http://blog-ro.python.org"&gt;Romanian&lt;/a&gt; and &lt;a class="reference external" href="http://blog-cn.python.org"&gt;Simplified Chinese&lt;/a&gt; have
joined the &lt;a class="reference external" href="http://blog.python.org/2011/05/python-insider-translation-project.html"&gt;Translation Project&lt;/a&gt;, and have already started publishing
the backlog of posts. As with the other translations, these parallel
editions may lag slightly behind the original posts on &lt;a class="reference external" href="http://blog.python.org/"&gt;Python
Insider&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-1898170954288770285?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=J4XrijXKrSo:oVHkbmUmvxo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=J4XrijXKrSo:oVHkbmUmvxo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=J4XrijXKrSo:oVHkbmUmvxo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=J4XrijXKrSo:oVHkbmUmvxo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=J4XrijXKrSo:oVHkbmUmvxo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=J4XrijXKrSo:oVHkbmUmvxo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=J4XrijXKrSo:oVHkbmUmvxo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=J4XrijXKrSo:oVHkbmUmvxo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/J4XrijXKrSo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/1898170954288770285?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/1898170954288770285?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/J4XrijXKrSo/romanian-and-simplified-chinese.html" title="Romanian and Simplified Chinese Translations" /><author><name>Doug Hellmann</name><uri>http://www.blogger.com/profile/01892352754222143463</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_--Fv8pzwveE/TUqnh9CVaTI/AAAAAAAAAWs/Z5gcLDnoegA/s220/book-smaller.jpg" /></author><feedburner:origLink>http://blog.python.org/2011/05/romanian-and-simplified-chinese.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAHRHsycSp7ImA9WhZXGE0.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-4273475647560725193</id><published>2011-05-07T16:38:00.002-04:00</published><updated>2011-05-07T16:38:55.599-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-07T16:38:55.599-04:00</app:edited><title>Jython Migrates to Mercurial</title><content type="html">&lt;div class="document" id="jython-migrates-to-mercurial"&gt;

&lt;p&gt;Jython has finally migrated from Subversion to Mercurial. This has been a long
time coming: unfortunately we had a difficult Subversion repo that took some
effort to cleanly convert to a different revision control system.&lt;/p&gt;
&lt;p&gt;The new official Jython repo is now hosted @&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://hg.python.org/jython"&gt;http://hg.python.org/jython&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;with a &lt;a class="reference external" href="http://bitbucket.org/jython/jython"&gt;BitBucket Mirror&lt;/a&gt; for easy forking.&lt;/p&gt;
&lt;p&gt;There's also a larger read-only repo with ongoing feature branches (converted
to Mercurial Bookmarks) hosted at &lt;a class="reference external" href="http://hg.python.org/jython-fullhistory"&gt;http://hg.python.org/jython-fullhistory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mercurial makes it even easier to contribute to Jython, pull up a fork and come
help us build Jython 2.6!&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-4273475647560725193?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=cr67BEYMOCo:MitZ1cfMsl0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=cr67BEYMOCo:MitZ1cfMsl0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=cr67BEYMOCo:MitZ1cfMsl0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=cr67BEYMOCo:MitZ1cfMsl0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=cr67BEYMOCo:MitZ1cfMsl0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=cr67BEYMOCo:MitZ1cfMsl0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=cr67BEYMOCo:MitZ1cfMsl0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=cr67BEYMOCo:MitZ1cfMsl0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/cr67BEYMOCo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/4273475647560725193?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/4273475647560725193?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/cr67BEYMOCo/jython-migrates-to-mercurial.html" title="Jython Migrates to Mercurial" /><author><name>Philip Jenvey</name><uri>http://www.blogger.com/profile/17437958274873977298</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://2.bp.blogspot.com/_aoPwdhKitjA/SPpOhvDjXtI/AAAAAAAAAA4/79gNWTLKRP0/S220/Phil+%40+La+Scala.jpg" /></author><feedburner:origLink>http://blog.python.org/2011/05/jython-migrates-to-mercurial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcARXc7cSp7ImA9WhZXFUw.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-5098421445272427367</id><published>2011-05-04T09:55:00.001-04:00</published><updated>2011-05-04T10:07:24.909-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-04T10:07:24.909-04:00</app:edited><title>Python 3.3 to Drop Support for OS/2, Windows 2000, and VMS</title><content type="html">&lt;div class="document" id="python-3-3-to-drop-support-for-os-2-windows-2000-and-vms"&gt;
&lt;p&gt;Every so often there comes a time to prune the list of supported operating systems to match the usage landscape. On top of that, the pool of contributing developers on a platform also holds significance, as there needs to be someone around to complete development tasks in order to have a quality release. Other factors, such as the age of an operating system and its hinderance on future development work, also weigh on the list.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://www.haypocalc.com/wiki/Victor_Stinner"&gt;Victor Stinner&lt;/a&gt; recently proposed &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-April/110872.html"&gt;dropping OS/2 and VMS support&lt;/a&gt; for CPython, a year after his &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2010-April/099471.html"&gt;original question&lt;/a&gt; on OS/2 support. Victor's original inquiry came around the time of his seemingly non-stop Unicode efforts, specifically for an issue with &lt;a class="reference external" href="http://docs.python.org/library/os#os.execvpe"&gt;os.execvpe()&lt;/a&gt; supporting environment variables via the &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0383/"&gt;PEP 383&lt;/a&gt; surrogateescape handler. OS/2 and VMS currently have no representation on the development team and receive no testing during the release process.&lt;/p&gt;
&lt;p&gt;The process of writing this post &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-May/111159.html"&gt;got me thinking&lt;/a&gt; about a &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2010-March/098074.html"&gt;previous discussion&lt;/a&gt; about removing Windows 2000, which seemed to fall to the wayside. Systems setting &lt;tt class="docutils literal"&gt;COMSPEC&lt;/tt&gt; to &lt;tt class="docutils literal"&gt;command.com&lt;/tt&gt; were also supposed to be on the chopping block back then. &lt;a class="reference external" href="http://hg.python.org/peps/rev/b9390aa12855"&gt;As of now&lt;/a&gt;, both have joined OS/2 and VMS. Windows 2000 is up for removal in order to make development work easier, removing the need to account for legacy APIs on an operating system which hit end-of-life in 2010.&lt;/p&gt;
&lt;p&gt;In order to begin removing support for those systems, Victor and I started by updating &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0011/"&gt;PEP 11&lt;/a&gt;.&lt;/p&gt;
&lt;div class="section" id="pep-11"&gt;
&lt;h4&gt;PEP 11&lt;/h4&gt;
&lt;p&gt;This PEP outlines the operating systems that are no longer supported and explains the process of adding a system to that list.&lt;/p&gt;
&lt;p&gt;Once it is decided that an operating system can start the process of removal, it is formally announced as unsupported. This announcement traditionally goes for the in-development version, so dropping support of OS/2, Windows 2000, and VMS begins with Python 3.3.&lt;/p&gt;
&lt;p&gt;The first stage is fairly hands off, more of a raising of the white flag. It's a signal that there's no one around to maintain the code and ensure a quality release. Changes to compilation and installation may be made to alert users on those platforms that the platform is unsupported. A note will go into the &amp;quot;&lt;a class="reference external" href="http://docs.python.org/dev/whatsnew/3.3.html#unsupported-operating-systems"&gt;What's New&lt;/a&gt;&amp;quot; document listing the newly unsupported platforms.&lt;/p&gt;
&lt;p&gt;After a release cycle of being unsupported, the version afterwards becomes fair game for removal of code. In this case, code can be removed in 3.4. There probably won't be a wholesale removal of that code, but developers that come across it in their normal work may remove any &lt;tt class="docutils literal"&gt;#ifdef&lt;/tt&gt; blocks, &lt;tt class="docutils literal"&gt;configure&lt;/tt&gt; sections, or out-of-date code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="what-you-can-do"&gt;
&lt;h4&gt;What You Can Do&lt;/h4&gt;
&lt;p&gt;If you are a user of OS/2 or VMS, there are a few things you can do to save your platform.&lt;/p&gt;
&lt;div class="section" id="become-a-maintainer"&gt;
&lt;h5&gt;Become a Maintainer&lt;/h5&gt;
&lt;p&gt;Nothing says support better than an active developer. Andrew MacIntyre has been the OS/2 maintainer for some time now, and he stated during Victor's first OS/2 query that OS/2 is behind on Unicode support, so that's certainly an area that needs focus. VMS appears to have some amount of external support via &lt;a class="reference external" href="http://www.vmspython.org"&gt;http://www.vmspython.org&lt;/a&gt;, but as discussed in &lt;a class="reference external" href="http://bugs.python.org/issue11918"&gt;issue 11918&lt;/a&gt;, someone needs to step up to allow the continued VMS support upstream.&lt;/p&gt;
&lt;p&gt;If you are interested in taking over for either platform, see the &lt;a class="reference external" href="http://docs.python.org/devguide"&gt;developer's guide&lt;/a&gt; for the current development proccesses.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="contribute-a-build-slave"&gt;
&lt;h5&gt;Contribute a build slave&lt;/h5&gt;
&lt;p&gt;With an active developer, a platform stands a better chance of survival. With a build slave, a platform stands an even better chance, not only at survival but also at quality.&lt;/p&gt;
&lt;p&gt;Python uses &lt;a class="reference external" href="http://trac.buildbot.net/"&gt;Buildbot&lt;/a&gt; for continuous integration, and build slaves are &lt;a class="reference external" href="http://www.python.org/dev/buildbot/"&gt;currently provided&lt;/a&gt; for Linux, Mac, Windows, and Open Indiana (Solaris), for various versions, architectures, and configurations. Being able to donate a machine to the build fleet for OS/2 or VMS would allow those platforms to receive the same attention that more mainstream platforms receive.&lt;/p&gt;
&lt;p&gt;If you can donate either time or hardware to help keep OS/2 and VMS alive, contact the &lt;a class="reference external" href="http://mail.python.org/mailman/listinfo/python-dev"&gt;python-dev&lt;/a&gt; mailing list to coordinate your efforts.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-5098421445272427367?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=RTWZNjzcHx0:VncS2cQK2Pk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=RTWZNjzcHx0:VncS2cQK2Pk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=RTWZNjzcHx0:VncS2cQK2Pk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=RTWZNjzcHx0:VncS2cQK2Pk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=RTWZNjzcHx0:VncS2cQK2Pk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=RTWZNjzcHx0:VncS2cQK2Pk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=RTWZNjzcHx0:VncS2cQK2Pk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=RTWZNjzcHx0:VncS2cQK2Pk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/RTWZNjzcHx0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/5098421445272427367?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/5098421445272427367?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/RTWZNjzcHx0/python-33-to-drop-support-for-os2.html" title="Python 3.3 to Drop Support for OS/2, Windows 2000, and VMS" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/05/python-33-to-drop-support-for-os2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04ER3s5eSp7ImA9WhZXE0k.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-8610531252555854819</id><published>2011-05-02T10:18:00.000-04:00</published><updated>2011-05-02T10:18:26.521-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-02T10:18:26.521-04:00</app:edited><title>Python Insider Translation Project</title><content type="html">&lt;div class="document" id="python-insider-translation-project"&gt;

&lt;p&gt;We think the content of this blog is useful for the whole Python
community, so reaching as many people as we can is one of our
priorities. To expand our reach, we have assembled a team of
translators to create parallel editions of the blog in other
languages. We are launching two translations today: &lt;a class="reference external" href="http://blog-ja.python.org/"&gt;Japanese&lt;/a&gt; and
&lt;a class="reference external" href="http://blog-es.python.org/"&gt;Spanish&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The translations will lag a little behind the posts on &lt;a class="reference external" href="http://blog.python.org/"&gt;Python
Insider&lt;/a&gt;, but try to keep more or less up to date.&lt;/p&gt;
&lt;div class="section" id="help-wanted"&gt;
&lt;h4&gt;Help Wanted&lt;/h4&gt;
&lt;p&gt;The translation team is still very small, so we are looking for more
people to join. We need people able to work on the existing languages,
or to help us expand to other languages.  If you can help in either
way, contact Doug Hellmann (doug dot hellmann at gmail).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-8610531252555854819?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qrDBu7N4X_k:wMiUAPxroZQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qrDBu7N4X_k:wMiUAPxroZQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qrDBu7N4X_k:wMiUAPxroZQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qrDBu7N4X_k:wMiUAPxroZQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qrDBu7N4X_k:wMiUAPxroZQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qrDBu7N4X_k:wMiUAPxroZQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=qrDBu7N4X_k:wMiUAPxroZQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=qrDBu7N4X_k:wMiUAPxroZQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/qrDBu7N4X_k" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8610531252555854819?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8610531252555854819?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/qrDBu7N4X_k/python-insider-translation-project.html" title="Python Insider Translation Project" /><author><name>Davidmh</name><uri>http://www.blogger.com/profile/14913018830568213369</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://curiosoperoinutil.com/forum/images/avatars/84933877545a037df6609b.jpg" /></author><feedburner:origLink>http://blog.python.org/2011/05/python-insider-translation-project.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ICQ30zeCp7ImA9WhZQGUQ.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-6105067293231885816</id><published>2011-04-28T10:05:00.000-04:00</published><updated>2011-04-28T10:06:02.380-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-28T10:06:02.380-04:00</app:edited><title>Meet the Team: Brian Curtin</title><content type="html">&lt;div class="document" id="meet-the-team-brian-curtin"&gt;
&lt;p&gt;&lt;em&gt;This post is part of the &amp;quot;Meet the Team&amp;quot; series of posts, which is meant to give a brief introduction to the Python core development team.&lt;/em&gt;&lt;/p&gt;
&lt;table class="docutils field-list" frame="void" rules="none"&gt;&lt;col class="field-name"&gt;&lt;/col&gt;&lt;col class="field-body"&gt;&lt;/col&gt;&lt;tbody valign="top"&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Name:&lt;/th&gt;&lt;td class="field-body"&gt;Brian Curtin&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Location:&lt;/th&gt;&lt;td class="field-body"&gt;Chicago, IL&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Home Page:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="http://blog.briancurtin.com/"&gt;http://blog.briancurtin.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;How long have you been using Python?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On a day to day basis going on 6 years. Prior to that I used it occasionally for a class in college and also at a summer internship.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you been a core committer?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just over a year. March 24 marked my first year with the group.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did you get started as a core developer? Do you remember your first commit?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I got started after noticing a documentation bug while writing an extension module at work, then I submitted a simple patch and Georg Brandl committed it almost immediately. After having that quick success and a fresh source checkout, I wanted to dive in and learn more about the modules I was using and ended up writing a patch to add context manager support to zipfile.&lt;/p&gt;
&lt;p&gt;The first few commits I made were documentation fixes in order to keep it simple early on. My first code commit was to add a few features and expand test coverage in the winreg module.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which parts of Python are you working on now?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As one of the few Windows users involved in CPython development, I try to keep an eye on whatever issues Windows users are having. Due to that, I've had a chance to work on a bunch of the standard library, including modules I hadn't used. I haven't done much with the interpreter itself, but I'm looking to change that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do with Python when you aren't doing core development work?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I build a variety of test tools for a trading database which is written in C++. There's an extension module for the data API so we can easily write regression tests, performance tests, and we're always trying to build more.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do when you aren't programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm a huge baseball fan. I umpire college baseball in the spring, various leagues in the summer, and mix in watching and going to Chicago Cubs games.&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-6105067293231885816?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=WvEj6rtc9A0:KTaJ5tHvMyM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=WvEj6rtc9A0:KTaJ5tHvMyM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=WvEj6rtc9A0:KTaJ5tHvMyM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=WvEj6rtc9A0:KTaJ5tHvMyM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=WvEj6rtc9A0:KTaJ5tHvMyM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=WvEj6rtc9A0:KTaJ5tHvMyM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=WvEj6rtc9A0:KTaJ5tHvMyM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=WvEj6rtc9A0:KTaJ5tHvMyM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/WvEj6rtc9A0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/6105067293231885816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/6105067293231885816?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/WvEj6rtc9A0/meet-team-brian-curtin.html" title="Meet the Team: Brian Curtin" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/04/meet-team-brian-curtin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUEQHY_eyp7ImA9WhZQE0Q.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-2188033026370112791</id><published>2011-04-21T09:56:00.001-04:00</published><updated>2011-04-21T09:56:41.843-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-21T09:56:41.843-04:00</app:edited><title>Meet the Team: Nick Coghlan</title><content type="html">&lt;div class="document" id="meet-the-team-nick-coghlan"&gt;&lt;p&gt;&lt;em&gt;This post is part of the &amp;quot;Meet the Team&amp;quot; series of posts, which is meant to give a brief introduction to the Python core development team.&lt;/em&gt;&lt;/p&gt;
&lt;table class="docutils field-list" frame="void" rules="none"&gt;&lt;col class="field-name"&gt;&lt;/col&gt;&lt;col class="field-body"&gt;&lt;/col&gt;&lt;tbody valign="top"&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Name:&lt;/th&gt;&lt;td class="field-body"&gt;Nick Coghlan&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Location:&lt;/th&gt;&lt;td class="field-body"&gt;Brisbane, Australia&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Home Page:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="http://www.boredomandlaziness.org"&gt;http://www.boredomandlaziness.org&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;How long have you been using Python?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First encountered 1.5.2 around 1999 when our lecturer used it for a networking course. Started using 2.2 professionally for automated testing around 2002 and never looked back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you been a core committer?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Guido gave me access in 2005 to update PEP 343 (primarily ditching the context method)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did you get started as a core developer? Do you remember your first commit?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As far as contributing patches goes, I had 3 months off in 2004 and spent a bunch of it working with Raymond and Facundo on the decimal module, primarily running the telco benchmarks and finding ways to speed up the code. A few of the stranger hacks in the decimal module (like the fast path for checking for special cases and the use of strings when converting tuples of digits to integers) stem from that time.&lt;/p&gt;
&lt;p&gt;My actual first commit would have been to PEP 343, and then after that probably to the AST compiler branch as we finished it up for inclusion in 2.5.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which parts of Python are you working on now?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;runpy, functools and contextlib are the main things that tend to end up in my inbox. I also keep an eye on what Brett and Victor are doing with import, what Raymond is doing with collections and itertools, and anything that happens to the compiler. I'm also fascinated by the cultural side of things.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do with Python when you aren't doing core development work?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not a great deal, actually. The Python stuff at work generally just ticks away doing its thing, so there isn't a lot of call to hack on it at the moment. I do want to do something to tidy up my digital music library, but the scripts for that are just a hack job at the moment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do when you aren't programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tae kwon do, computer gaming, soccer, reading, etc, etc...&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-2188033026370112791?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Kit-4Lj2bM:fciEJ9uy13M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Kit-4Lj2bM:fciEJ9uy13M:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=9Kit-4Lj2bM:fciEJ9uy13M:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Kit-4Lj2bM:fciEJ9uy13M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=9Kit-4Lj2bM:fciEJ9uy13M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Kit-4Lj2bM:fciEJ9uy13M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=9Kit-4Lj2bM:fciEJ9uy13M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Kit-4Lj2bM:fciEJ9uy13M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/9Kit-4Lj2bM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/2188033026370112791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/2188033026370112791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/9Kit-4Lj2bM/meet-team-nick-coghlan.html" title="Meet the Team: Nick Coghlan" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/04/meet-team-nick-coghlan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4EQ344cCp7ImA9WhZQEkw.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-4180655267054146064</id><published>2011-04-19T07:35:00.000-04:00</published><updated>2011-04-19T07:35:02.038-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T07:35:02.038-04:00</app:edited><title>New Blog Design</title><content type="html">&lt;div class="document" id="new-blog-design"&gt;

&lt;p&gt;If you read &lt;a class="reference external" href="http://blog.python.org"&gt;Python Insider&lt;/a&gt; through a feed reader, you may not have
seen the new page design &lt;a class="reference external" href="http://twitter.com/sigviper"&gt;Marcin Wojtczuk&lt;/a&gt; created for us. It looks
great while maintaining a lightweight feel, and we couldn't be happier
with the results.&lt;/p&gt;
&lt;p&gt;Thank you for your time and efforts, Marcin!&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-4180655267054146064?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ePpTwtHKyVc:DOQ-6K1Wl9c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ePpTwtHKyVc:DOQ-6K1Wl9c:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ePpTwtHKyVc:DOQ-6K1Wl9c:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ePpTwtHKyVc:DOQ-6K1Wl9c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ePpTwtHKyVc:DOQ-6K1Wl9c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ePpTwtHKyVc:DOQ-6K1Wl9c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ePpTwtHKyVc:DOQ-6K1Wl9c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ePpTwtHKyVc:DOQ-6K1Wl9c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/ePpTwtHKyVc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/4180655267054146064?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/4180655267054146064?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/ePpTwtHKyVc/new-blog-design.html" title="New Blog Design" /><author><name>Doug Hellmann</name><uri>http://www.blogger.com/profile/01892352754222143463</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_--Fv8pzwveE/TUqnh9CVaTI/AAAAAAAAAWs/Z5gcLDnoegA/s220/book-smaller.jpg" /></author><feedburner:origLink>http://blog.python.org/2011/04/new-blog-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4FR3o_eSp7ImA9WhZRF0Q.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-7504707121491029670</id><published>2011-04-14T10:44:00.000-04:00</published><updated>2011-04-14T10:55:16.441-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-14T10:55:16.441-04:00</app:edited><title>urllib Security Vulnerability Fixed</title><content type="html">&lt;div class="document" id="urllib-urllib2-security-vulnerability-fixed"&gt;
&lt;p&gt;Guido van Rossum &lt;a class="reference external" href="http://hg.python.org/cpython/rev/a778b963eae3"&gt;recently pushed a fix&lt;/a&gt; for CVE-2011-1521, a security issue in Python's URL libraries. While security issues are rare, it's a good opportunity to let the community in on the process behind reporting, handling, and fixing these issues as they arise.&lt;/p&gt;
&lt;div class="section" id="reporting-an-issue"&gt;&lt;h4&gt;Reporting an Issue&lt;/h4&gt;&lt;p&gt;If you've found a security issue within CPython, the first thing we ask is that you keep the details of the issue private. After determining that you have found a legitimate security issue, generating a succinct but detailed report is key to transferring your knowledge to the core developers.&lt;/p&gt;
&lt;p&gt;A good report clearly explains how the relevant parts of the system are affected by the issue. If the issue occurs on a specific platform or due to a dependency, that's helpful to know as well. The affected versions are useful to know, and it's likely that the vulernability will be tested for all active versions as well. Lastly, if you have a test case that shows the issue, be sure to include it. Your report should be sent to the &lt;a class="reference external" href="mailto:security@python.org"&gt;security&amp;#64;python.org&lt;/a&gt; group.&lt;/p&gt;
&lt;p&gt;Niels Heinen of the Google Security Team recently &lt;a class="reference external" href="http://bugs.python.org/issue11662#msg131981"&gt;submitted a good report&lt;/a&gt;. He discovered an issue with HTTP 302 redirection handling in the standard library &lt;a class="reference external" href="http://docs.python.org/library/urllib"&gt;urllib&lt;/a&gt; and &lt;a class="reference external" href="http://docs.python.org/library/urllib2"&gt;urllib2&lt;/a&gt; modules. What he found was that a server could redirect requests to inappropriate schemes, leading to situations which could compromise data or systems. In his initial report, Neils explains two scenarios where these redirections could expose problems.&lt;/p&gt;
&lt;p&gt;First, since &lt;tt class="docutils literal"&gt;urllib&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;urllib2&lt;/tt&gt; supplies a handler for the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;file://&lt;/span&gt;&lt;/tt&gt; URL scheme, a redirection to &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;file:///etc/passwd&lt;/span&gt;&lt;/tt&gt; could expose password data. Neils also explained that redirection to a system device like &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;file:///dev/zero&lt;/span&gt;&lt;/tt&gt; could lead to exhaustion of resources leading to a denial of service.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="handling-a-report"&gt;&lt;h4&gt;Handling a Report&lt;/h4&gt;&lt;p&gt;Due to the sensitive nature of security reports, the &lt;a class="reference external" href="mailto:security@python.org"&gt;security&amp;#64;python.org&lt;/a&gt; list is maintained by a small group of trusted developers who analyze and act on reports as soon as possible. If you wish to keep your transmissions to the list encrypted, see the &lt;a class="reference external" href="http://www.python.org/news/security/"&gt;security news&lt;/a&gt; page for OpenPGP details.&lt;/p&gt;
&lt;p&gt;If the group determines that there is in fact a security issue, a public bug report may be made with an accompanying patch. In this case, Guido van Rossum made the issue public in &lt;a class="reference external" href="http://bugs.python.org/issue11662"&gt;issue #11662&lt;/a&gt;, complete with an initial patch.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="fixing-the-issue"&gt;&lt;h4&gt;Fixing the Issue&lt;/h4&gt;&lt;p&gt;What Guido's patch does is restrict redirection to &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;http://&lt;/span&gt;&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;https://&lt;/span&gt;&lt;/tt&gt;, and &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;ftp://&lt;/span&gt;&lt;/tt&gt; URL schemes. FTP redirection was deemed acceptable, and it's actually a common redirection: download mirroring systems sometimes redirect requests to geographically convenient FTP servers.&lt;/p&gt;
&lt;p&gt;For Python 2.x, &lt;a class="reference external" href="http://docs.python.org/library/urllib#urllib.FancyURLopener"&gt;FancyURLopener&lt;/a&gt;'s &lt;tt class="docutils literal"&gt;redirect_internal&lt;/tt&gt; method now raises an &lt;tt class="docutils literal"&gt;IOError&lt;/tt&gt; when redirection to an inappropriate scheme is requested. &lt;a class="reference external" href="http://docs.python.org/library/urllib2#httpredirecthandler-objects"&gt;HTTPRedirectHandler&lt;/a&gt;'s &lt;tt class="docutils literal"&gt;http_error_302&lt;/tt&gt; does the same, only raising &lt;tt class="docutils literal"&gt;HTTPError&lt;/tt&gt;. In Python 3, &lt;a class="reference external" href="http://docs.python.org/dev/library/urllib.request"&gt;urllib.request&lt;/a&gt; received the same fixes. Included with the patch are two tests which exercise redirection to both valid and invalid schemes.&lt;/p&gt;
&lt;p&gt;As for users receiving the fix, the final security release of Python 2.5 will be occurring soon. While there are no scheduled dates for the next patch releases of the maintenance branches - 2.6, 2.7, 3.1, and 3.2 - all received the code to fix the vulnerability.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-7504707121491029670?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Z_E5ra50vU:szpd5gF1ucU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Z_E5ra50vU:szpd5gF1ucU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=9Z_E5ra50vU:szpd5gF1ucU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Z_E5ra50vU:szpd5gF1ucU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=9Z_E5ra50vU:szpd5gF1ucU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Z_E5ra50vU:szpd5gF1ucU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=9Z_E5ra50vU:szpd5gF1ucU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=9Z_E5ra50vU:szpd5gF1ucU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/9Z_E5ra50vU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/7504707121491029670?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/7504707121491029670?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/9Z_E5ra50vU/urllib-security-vulnerability-fixed.html" title="urllib Security Vulnerability Fixed" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/04/urllib-security-vulnerability-fixed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UHRX05fyp7ImA9WhZRFU8.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-582360390405655142</id><published>2011-04-11T09:29:00.000-04:00</published><updated>2011-04-11T09:40:34.327-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T09:40:34.327-04:00</app:edited><title>Meet the Team: Tarek Ziadé</title><content type="html">&lt;div class="document" id="meet-the-team-tarek-ziade"&gt;
&lt;p&gt;&lt;em&gt;This post is part of the &amp;quot;Meet the Team&amp;quot; series of posts, which is meant to give a brief introduction to the Python core development team.&lt;/em&gt;&lt;/p&gt;
&lt;table class="docutils field-list" frame="void" rules="none"&gt;&lt;col class="field-name"&gt;&lt;/col&gt;&lt;col class="field-body"&gt;&lt;/col&gt;&lt;tbody valign="top"&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Name:&lt;/th&gt;&lt;td class="field-body"&gt;Tarek Ziadé&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Location:&lt;/th&gt;&lt;td class="field-body"&gt;Turcey near Dijon, Burgundy, France&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Home Page:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="http://ziade.org"&gt;http://ziade.org&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;How long have you been using Python?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Around ten years&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you been a core committer?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since December 21 2008&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did you get started as a core developer? Do you remember your first commit?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I started as a core developer in order to maintain Distutils and make

it evolve.&lt;/p&gt;
&lt;p&gt;My first commit as a core developer was a fix for small bug in a distutils feature I proposed before I became a commiter. That feature was added the week before in Python. It's the ability to configure Distutils' register and upload commands to work with several pypi-like servers.&lt;/p&gt;
&lt;p&gt;I committed with my brand new rights on Wed, 24 Dec 2008, which happens to be my birthday, and also the 17th anniversary of the 0.9.4 release of Python.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which parts of Python are you working on now?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the stdlib: sysconfig, distutils, packaging (to be added in 3.3), shutil, pkgutil, and occasionally in other modules&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do with Python when you aren't doing core development work?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I work at Mozilla in the Service team, where I build web services using Python&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do when you aren't programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I read comics/graphic novels, write books, play with my kids, drink wines with my wife, and try to renovate my 1848's house.&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-582360390405655142?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=6CPCIx5YOBA:V0zaq1Fbvqs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=6CPCIx5YOBA:V0zaq1Fbvqs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=6CPCIx5YOBA:V0zaq1Fbvqs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=6CPCIx5YOBA:V0zaq1Fbvqs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=6CPCIx5YOBA:V0zaq1Fbvqs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=6CPCIx5YOBA:V0zaq1Fbvqs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=6CPCIx5YOBA:V0zaq1Fbvqs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=6CPCIx5YOBA:V0zaq1Fbvqs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/6CPCIx5YOBA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/582360390405655142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/582360390405655142?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/6CPCIx5YOBA/meet-team-tarek-ziade.html" title="Meet the Team: Tarek Ziadé" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/04/meet-team-tarek-ziade.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUDQ3w-fCp7ImA9WhZREU0.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-7508623365418866986</id><published>2011-04-06T12:44:00.000-04:00</published><updated>2011-04-06T12:44:32.254-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T12:44:32.254-04:00</app:edited><title>Formalizing the AST Change Control Policy</title><content type="html">&lt;div class="document" id="formalizing-the-ast-change-control-policy"&gt;&lt;p&gt;Python exposes an abstract syntax tree (AST) representing the compiled form of Python source code in the &lt;a class="reference external" href="http://docs.python.org/py3k/library/ast.html"&gt;AST module&lt;/a&gt;. The AST module allows user code to inspect and manipulate of the AST representation, in between parsing of source and compilation of bytecode.&lt;/p&gt;&lt;p&gt;Although the meaning of Python code is defined by the &lt;a class="reference external" href="http://docs.python.org/py3k/reference/index.html"&gt;language reference&lt;/a&gt;, the AST module is a CPython implementation detail, and is not required to be implemented in other Python implementations.&lt;/p&gt;&lt;div class="section" id="compatibility-of-the-ast"&gt;&lt;h4&gt;Compatibility of the AST&lt;/h4&gt;&lt;p&gt;As part of &lt;a class="reference external" href="http://bugs.python.org/issue11549"&gt;work&lt;/a&gt; to rewrite the CPython peephole optimizer to work on the AST (rather than on the raw bytecode, as is currently the case), Eugene Toder needed to make some changes to the structure of the AST. As a CPython implementation detail, it wasn't immediately clear what backward compatibility policies applied to the AST.  So, Eugene &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-April/110399.html"&gt;asked the question&lt;/a&gt; on python-dev. Was it necessary, when changing the AST, to ensure backward compatibility?&lt;/p&gt;&lt;p&gt;The general consensus was that compatibility is &lt;em&gt;not&lt;/em&gt; required. The AST module exposes a constant, &lt;tt class="docutils literal"&gt;ast.__version__&lt;/tt&gt;, which provides a means for user code to vary its behaviour depending on the version of the AST it encounters. This was viewed as sufficient compatibility for an implementation-specific module.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="other-python-implementations"&gt;&lt;h4&gt;Other Python Implementations&lt;/h4&gt;&lt;p&gt;In actual fact, both Jython and IronPython maintainers pointed out that their respective implementations either had a compatible AST module, or intended to provide one. Even so, they did not feel that this meant that the AST should be frozen, and were happy that as long as the &lt;tt class="docutils literal"&gt;ast.__version__&lt;/tt&gt; constant changed, the AST could be modified in incompatible ways.&lt;/p&gt;&lt;p&gt;One point that was raised is that a full suite of tests in &lt;tt class="docutils literal"&gt;test_ast.py&lt;/tt&gt; would help other implementations to ensure that their AST representations were compatible with CPython. Increasing the coverage of &lt;tt class="docutils literal"&gt;test_ast.py&lt;/tt&gt; would make a good project for someone who wanted to get involved with Python internals!&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="what-will-happen-next"&gt;&lt;h4&gt;What Will Happen Next?&lt;/h4&gt;&lt;p&gt;The &lt;a class="reference external" href="http://bugs.python.org/issue11549"&gt;patch&lt;/a&gt; which started the discussion is not yet included in CPython. So possibly, nothing will happen. However, if it does get committed, the AST &lt;em&gt;will&lt;/em&gt; change in an incompatible way. The &lt;tt class="docutils literal"&gt;ast.__version__&lt;/tt&gt; constant will change to reflect this, so user code will know, but changes will be needed. More generally, this will be the way AST changes will be handled in future.&lt;/p&gt;&lt;p&gt;The Python developers are interested in how widely the AST is used, and how much impact this policy will have. If any readers have code that will be affected by the change, they are encouraged to participate in the &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-April/110399.html"&gt;discussion on python-dev&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-7508623365418866986?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=PG8PkfKa_pY:zlsGwT68Jbk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=PG8PkfKa_pY:zlsGwT68Jbk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=PG8PkfKa_pY:zlsGwT68Jbk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=PG8PkfKa_pY:zlsGwT68Jbk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=PG8PkfKa_pY:zlsGwT68Jbk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=PG8PkfKa_pY:zlsGwT68Jbk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=PG8PkfKa_pY:zlsGwT68Jbk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=PG8PkfKa_pY:zlsGwT68Jbk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/PG8PkfKa_pY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/7508623365418866986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/7508623365418866986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/PG8PkfKa_pY/formalizing-ast-change-control-policy.html" title="Formalizing the AST Change Control Policy" /><author><name>Paul Moore</name><uri>http://www.blogger.com/profile/17557923197983461835</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/04/formalizing-ast-change-control-policy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMBQHY-eip7ImA9WhZSF0k.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-5109760979184124429</id><published>2011-04-01T08:28:00.000-04:00</published><updated>2011-04-02T07:40:51.852-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-02T07:40:51.852-04:00</app:edited><title>Thomas Heller Steps Down as ctypes Maintainer</title><content type="html">&lt;div class="document" id="thomas-heller-steps-down-as-ctypes-maintainer"&gt;

&lt;p&gt;The Python development community owes a big thanks to long-time &lt;a class="reference external" href="http://docs.python.org/library/ctypes"&gt;ctypes&lt;/a&gt;
maintainer Thomas Heller. Earlier this month, Thomas
&lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-March/109395.html"&gt;announced his departure&lt;/a&gt; from the CPython project, the home of his
&lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; library since Python 2.5.&lt;/p&gt;
&lt;p&gt;I had a chance to talk with Thomas and he filled me in on his history with
Python and his &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;py2exe&lt;/tt&gt; projects.&lt;/p&gt;
&lt;div class="section" id="python"&gt;
&lt;h4&gt;Python&lt;/h4&gt;
&lt;p&gt;Back in 1999, Thomas came into Mark Lutz's &lt;a class="reference external" href="http://www.amazon.com/Programming-Python-Mark-Lutz/dp/0596009259"&gt;Programming Python&lt;/a&gt; while
looking for a resource to learn Python and became fascinated with the
language right away. He was in the process of replacing &lt;a class="reference external" href="http://groups.csail.mit.edu/mac/projects/scheme/"&gt;Scheme&lt;/a&gt; as the
extension language for a large C program he had written for Windows.&lt;/p&gt;
&lt;p&gt;As for how he got involved in the development team, his first contribution
to CPython (and open source in general), was a small Windows-related patch
to &lt;tt class="docutils literal"&gt;distutils&lt;/tt&gt;. His interest in &lt;tt class="docutils literal"&gt;distutils&lt;/tt&gt; ultimately led him to the
creation of the &lt;tt class="docutils literal"&gt;bdist_wininst&lt;/tt&gt; command to create point-and-click Windows
installers. From there, Greg Ward invited him to the python-dev group where
he eventually received commit access.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="py2exe"&gt;
&lt;h4&gt;py2exe&lt;/h4&gt;
&lt;p&gt;Like many Windows users, he had the need to deploy shrink-wrapped Python
applications as a single executable file. Early approaches to the problem
came from Python luminaries Fredrik Lundh's &lt;tt class="docutils literal"&gt;squeeze&lt;/tt&gt; and Christian
Tismer's &lt;tt class="docutils literal"&gt;sqfreeze&lt;/tt&gt;, and Thomas contributed several patches to Gordon
McMillan's &lt;a class="reference external" href="http://davidf.sjsoft.com/mirrors/mcmillan-inc/install1.html"&gt;Installer&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;His interest in &lt;tt class="docutils literal"&gt;distutils&lt;/tt&gt; led Thomas to consider porting &lt;tt class="docutils literal"&gt;Installer&lt;/tt&gt;
to an extension to the packaging library. However, he ended up
rewriting the source in order to make use of the existing &lt;tt class="docutils literal"&gt;distutils&lt;/tt&gt;
framework. In the end, he chose the simple yet descriptive name &lt;tt class="docutils literal"&gt;py2exe&lt;/tt&gt;
for the project.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="ctypes"&gt;
&lt;h4&gt;ctypes&lt;/h4&gt;
&lt;p&gt;The idea for &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; came from a need to go beyond what &lt;a class="reference external" href="http://sourceforge.net/projects/pywin32/"&gt;pywin32&lt;/a&gt;
provided at the time. Additionally, his work with Scheme required an interface
to Windows APIs much like his Python work did, so he wanted to keep his
project going.&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; saw its first public release in 2003 around the release of Python
2.3, after Thomas received numerous requests to publish the project. He
mentioned what used to be his small personal project on his &lt;a class="reference external" href="http://python.net/crew/theller/"&gt;Starship page&lt;/a&gt;,
but it grew into a widely used library in no time.&lt;/p&gt;
&lt;p&gt;He originally started the project on Windows but quickly heard calls for a
Linux port, which the community helped him complete. With the Linux port came
the introduction of &lt;a class="reference external" href="http://sourceware.org/libffi/"&gt;libffi&lt;/a&gt; to the project, which he also began using on
Windows to replace its lower-level implementation.&lt;/p&gt;
&lt;p&gt;2006 marked a 1.0 release for &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt;, which corresponded with the
library's acceptance into the standard library in Python 2.5. After years of
hard work and numerous releases per year, &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; was now bundled with
Python and available by default to a much wider audience.&lt;/p&gt;
&lt;p&gt;It took a lot of people to get &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; to where it is today, and Thomas
wants to thank everyone involved, especially Robin Becker. Robin was
instrumental in the early phases of the project and contributed both
knowledge and encouragement.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="a-new-ctypes-maintainer"&gt;
&lt;h4&gt;A New ctypes Maintainer&lt;/h4&gt;
&lt;p&gt;After all of the hard work Thomas put in over the years, we would hate to
see the project come to a stand still. If you have C experience and time to
help out the Python project, the community would greatly appreciate your
effort. Check out the new &lt;a class="reference external" href="http://docs.python.org/devguide"&gt;developer guide&lt;/a&gt; and search &lt;a class="reference external" href="http://bugs.python.org"&gt;the bug tracker&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Updated:&lt;/strong&gt; Fixed some links.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-5109760979184124429?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZQL908sirPw:mVvaKLoIU6A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZQL908sirPw:mVvaKLoIU6A:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ZQL908sirPw:mVvaKLoIU6A:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZQL908sirPw:mVvaKLoIU6A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ZQL908sirPw:mVvaKLoIU6A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZQL908sirPw:mVvaKLoIU6A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=ZQL908sirPw:mVvaKLoIU6A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=ZQL908sirPw:mVvaKLoIU6A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/ZQL908sirPw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/5109760979184124429?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/5109760979184124429?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/ZQL908sirPw/thomas-heller-steps-down-as-ctypes.html" title="Thomas Heller Steps Down as ctypes Maintainer" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/04/thomas-heller-steps-down-as-ctypes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUANQXk7fyp7ImA9WhZSFEQ.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-440607556317175741</id><published>2011-03-30T10:46:00.000-04:00</published><updated>2011-03-30T11:09:50.707-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-30T11:09:50.707-04:00</app:edited><title>Meet the Team: Benjamin Peterson</title><content type="html">&lt;div class="document" id="meet-the-team-benjamin-peterson"&gt;
&lt;em&gt;This post is part of the "Meet the Team" series of posts, which is meant to give a brief introduction to the Python core development team.&lt;/em&gt;

&lt;table class="docutils field-list" frame="void" rules="none"&gt;&lt;colgroup&gt;&lt;col class="field-name"&gt;&lt;/colgroup&gt;&lt;colgroup&gt;&lt;col class="field-body"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Name:&lt;/th&gt;&lt;td class="field-body"&gt;Benjamin Peterson&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Location:&lt;/th&gt;&lt;td class="field-body"&gt;Minnesota, USA&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Home Page:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="http://benjamin-peterson.org/"&gt;http://benjamin-peterson.org&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Blog:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;a class="reference external" href="http://pybites.blogspot.com/"&gt;http://pybites.blogspot.com&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;How long have you been using Python?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.5 years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you been a core committer?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Exactly 3 years this March 25th.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did you get started as a core developer? Do you remember your first commit?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My first proposal was personally &lt;a class="reference external" href="http://bugs.python.org/issue1828"&gt;rejected by Guido himself&lt;/a&gt;. Luckily, I persisted and got some patches accepted. I believe my first commit was reordering the Misc/ACKS file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which parts of Python are you working on now?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I like the parser, compiler, and interpreter core, but I've been known to dabble in just about every part of core Python development... except Windows!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do with Python when you aren't doing core development work?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I use it to implement a Python interpreter (&lt;a class="reference external" href="http://pypy.org/"&gt;http://pypy.org&lt;/a&gt;)!  Truly, I'm a Python implementor at heart. :) I am the creator of six (&lt;a class="reference external" href="http://pypi.python.org/pypi/six"&gt;http://pypi.python.org/pypi/six&lt;/a&gt;), a Python 2 and 3 compatibility library.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do when you aren't programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Compose music, play clarinet, and read math books. I do a little hiking now and then, too.&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-440607556317175741?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=u1zvCqyabZA:lF2tbHMNwjc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=u1zvCqyabZA:lF2tbHMNwjc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=u1zvCqyabZA:lF2tbHMNwjc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=u1zvCqyabZA:lF2tbHMNwjc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=u1zvCqyabZA:lF2tbHMNwjc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=u1zvCqyabZA:lF2tbHMNwjc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=u1zvCqyabZA:lF2tbHMNwjc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=u1zvCqyabZA:lF2tbHMNwjc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/u1zvCqyabZA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/440607556317175741?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/440607556317175741?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/u1zvCqyabZA/meet-team-benjamin-peterson.html" title="Meet the Team: Benjamin Peterson" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/03/meet-team-benjamin-peterson.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IBQX8zeyp7ImA9WhZSE04.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-7623155794172111606</id><published>2011-03-28T14:10:00.000-04:00</published><updated>2011-03-28T15:12:30.183-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T15:12:30.183-04:00</app:edited><title>Deprecations between Python 2.7 and 3.x</title><content type="html">&lt;div class="document" id="deprecations-between-python-2-7-and-3-x"&gt;&lt;p&gt;Recent &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-March/109010.html"&gt;discussion on python-dev&lt;/a&gt; highlighted an issue with Python's current deprecation policy facing developers moving from Python 2.7 to current versions of Python 3.x. As a result of this issue, the development team has modified the current deprecation policy to take into account the fact that Python users will normally migrate directly from Python 2.7 to the latest version of 3.x without ever seeing older versions.&lt;/p&gt;&lt;div class="section" id="background"&gt;&lt;h4&gt;Background&lt;/h4&gt;&lt;p&gt;Python has a strong commitment to backward compatibility. No change is allowed unless it conforms to compatibility guidelines, which in essence say that correct programs should not be broken by new versions of Python. However, this is not always possible, e.g., where an API is clearly broken and needs to be replaced by something else. In this case, Python follows a deprecation policy based on a one-year transition period where features to be removed are formally deprecated.  In the intermediate period, a deprecation warning must be issued to allow developers time to update their code. Full details of Python's deprecation policy are documented in &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0005/"&gt;PEP 5&lt;/a&gt;. As changes are only made in new Python releases, and there is normally an 18 month gap between releases, this means that a one-release deprecation period is the norm.&lt;/p&gt;&lt;p&gt;The one exception to this policy was Python 3. The major version change from Python 2 to Python 3 was specifically intended to allow changes which broke backward compatibility, to allow the Python developers the chance to correct issues which simply couldn't be fixed within the existing policy. For example, making strings Unicode by default, and returning iterators instead of lists.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="parallel-lines-of-development"&gt;&lt;h4&gt;Parallel Lines of Development&lt;/h4&gt;&lt;p&gt;Knowing the transition to Python 3 would take time, 5 years by many estimates, there was going to be some amount of parallel development on 2 and 3.&lt;/p&gt;&lt;p&gt;With Python 2.7 being the final release of Python 2, it was agreed upon that the maintenance period would be extended for a substantial period. In the end, developers who want to move to a newer version of Python will need to make the jump to Python 3.&lt;/p&gt;&lt;p&gt;Here lies one the problems...&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="surprise-deprecations"&gt;&lt;h4&gt;Surprise deprecations&lt;/h4&gt;&lt;p&gt;In &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-March/109010.html"&gt;a thread on python-dev&lt;/a&gt;, a poster pointed out that one specific function in the C API, &lt;tt class="docutils literal"&gt;PyCObject_AsVoidPtr&lt;/tt&gt;, was removed with what appeared to be insufficient warning. And yet, this is what the deprecation policy was supposed to protect against! What happened?&lt;/p&gt;&lt;p&gt;The change was part of a larger migration from an older API (&lt;tt class="docutils literal"&gt;PyCObject&lt;/tt&gt;) to a newer, improved one (&lt;tt class="docutils literal"&gt;PyCapsule&lt;/tt&gt;). The problem is that &lt;tt class="docutils literal"&gt;PyCObject&lt;/tt&gt; is the default, and indeed, only API available in Python 2.6. It went on to be deprecated in Python 2.7. In Python 3.2, that API doesn't exist and the new &lt;tt class="docutils literal"&gt;PyCapsule&lt;/tt&gt; should be used. That gives a deprecation period from the release of Python 2.7 (July 2010) to the release of Python 3.2 (February 2011) - about 7 months. That is a lot less than the minimum 12 month period, and makes it difficult for developers to support a reasonable range of Python releases.&lt;/p&gt;&lt;p&gt;For someone moving from 3.0 to 3.1 then 3.2, the deprecation path is fine.  Python 3.1 was released in March 2010 with the deprecation, and so in the 3.x release series, a deprecation period of almost 12 months was available.  However, that's not what people really do: they go from 2.7 straight to the latest version of 3.x, in this case 3.2, resulting in this problem. This was never the intention of python-dev, but PEP 5 had not been written with parallel versions of Python, both of which were under active development, in mind.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="so-what-do-we-do"&gt;&lt;h4&gt;So what do we do?&lt;/h4&gt;&lt;p&gt;While the &lt;tt class="docutils literal"&gt;PyCObject&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;PyCapsule&lt;/tt&gt; API break is a definite problem, it's not impossible to work around, but at least one poster on python-dev had some difficulties to deal with. Overall, this shouldn't have happened.&lt;/p&gt;&lt;p&gt;For the specific case of &lt;tt class="docutils literal"&gt;PyCObject&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;PyCapsule&lt;/tt&gt;, the problem already exists and there is not much that can be done. Reinstating &lt;tt class="docutils literal"&gt;PyCObject&lt;/tt&gt; was not really an option, as that would only add further incompatibilities.  However, the general view was that it is possible, albeit tedious, to write code to adapt to whichever API is available. In fact, in Python 3.1, the &lt;tt class="docutils literal"&gt;PyCObject&lt;/tt&gt; API was written as a wrapper over the &lt;tt class="docutils literal"&gt;PyCapsule&lt;/tt&gt; API. There was a suggestion that should anyone need it, the Python 3.1 implementation could be extracted for use in 3rd party code. Additionally, it was agreed that a &amp;quot;retroactive&amp;quot; PEP covering the change would be written, to describe the reasons behind the change and document resources which can help developers migrate.&lt;/p&gt;&lt;p&gt;On a more general note, the Python development team is now aware of the problem and will work to avoid it reoccurring. Guido &lt;a class="reference external" href="http://mail.python.org/pipermail/python-dev/2011-March/109450.html"&gt;posted a review&lt;/a&gt; of the situation and suggested that Python 3 should be conservative in the use of deprecations for the moment.  At a minimum, deprecated APIs will be retained substantially longer before being removed, to give developers moving from 2.7 a migration path.&lt;/p&gt;&lt;p&gt;More indirectly, the thread raised the issue of how to more effectively communicate changes in Python to a wider audience, in a more timely manner - an issue that this blog was formed precisely to address.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="what-does-all-this-mean"&gt;&lt;h4&gt;What does all this mean?&lt;/h4&gt;&lt;p&gt;First and foremost, it means that the Python developers don't always get everything right. Nobody meant to make life harder for developers, it just wasn't something that was spotted in time.&lt;/p&gt;&lt;p&gt;Secondly, fixing the problem can do more harm than good, so the &lt;tt class="docutils literal"&gt;PyCObject&lt;/tt&gt; API is not being reinstated. While reinstatement might help developers who were bitten by the change, overall it would make compatibility issues more complex.  In the meantime, we have to put up with the issue and move on. Lessons were learned, and we won't make the same mistake next time.&lt;/p&gt;&lt;p&gt;On thing this shows is that the Python development team wants to hear from the users.  Compatibility is very important, and every effort is made to make the transition to new versions as painless as possible. In particular, library developers should be able to support multiple Python versions with a reasonable level of effort.&lt;/p&gt;&lt;p&gt;Finally, the developers haven't abandoned 2.7. While it won't be getting new features and there will be no 2.8, the views of people using 2.7 are still important. Making sure users can move to 3.x when they are ready is vital for the whole Python community.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-7623155794172111606?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=i7uMKFpIaj8:Ho9HFStuUnE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=i7uMKFpIaj8:Ho9HFStuUnE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=i7uMKFpIaj8:Ho9HFStuUnE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=i7uMKFpIaj8:Ho9HFStuUnE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=i7uMKFpIaj8:Ho9HFStuUnE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=i7uMKFpIaj8:Ho9HFStuUnE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=i7uMKFpIaj8:Ho9HFStuUnE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=i7uMKFpIaj8:Ho9HFStuUnE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/i7uMKFpIaj8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/7623155794172111606?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/7623155794172111606?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/i7uMKFpIaj8/recent-discussion-on-python-dev.html" title="Deprecations between Python 2.7 and 3.x" /><author><name>Paul Moore</name><uri>http://www.blogger.com/profile/17557923197983461835</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/03/recent-discussion-on-python-dev.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8BRXc_fyp7ImA9WhZRFUg.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-2890677948571122030</id><published>2011-03-24T14:37:00.000-04:00</published><updated>2011-04-11T16:14:14.947-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T16:14:14.947-04:00</app:edited><title>Of polling, futures and parallel execution</title><content type="html">&lt;p&gt;One of the big concerns in modern computing is saving power. It matters a lot in portable devices (laptops, tablets, handhelds). Your modern CPU is able to enter a various number of low-power states when it is idle. The longer it stays idle, the deeper the low-power state, and the lower the energy consumed, and, therefore, the longer the battery life of your device on a single charge.&lt;/p&gt;

&lt;p&gt;Low-power states have an enemy: polling. When a task periodically wakes up the CPU, even for something as trivial as reading a memory location to check for potential changes, the CPU leaves the low-power state, wakes up all its internal structures, and will only re-enter a low-power state long after your menial periodic wakeup has finished its intended work. This kills battery life. Intel itself &lt;a href="http://www.lesswatts.org/projects/applications-power-management/avoid-pulling.php"&gt;feels concerned&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Python 3.2 comes with a new standard module to launch concurrent tasks and wait for them to end: the &lt;a href="http://docs.python.org/dev/library/concurrent.futures.html"&gt;concurrent.futures&lt;/a&gt; module. While perusing its code, I noticed that it used polling in some of its worker threads and processes. I'm saying "some of", as the implementation differs between the &lt;a href="http://docs.python.org/dev/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor"&gt;ThreadPoolExecutor&lt;/a&gt; and the &lt;a href="http://docs.python.org/dev/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor"&gt;ProcessPoolExecutor&lt;/a&gt;. The former did polling in each of its worker threads, while the latter only did so in a single thread named the &lt;span style="font-style: italic;"&gt;queue management thread&lt;/span&gt;, which is used to communicate with the worker processes.&lt;/p&gt;

&lt;p&gt;Polling here was only used for one thing: detecting when the shutdown procedure should be started. Other tasks such as queueing callables or fetching results from previously queued callables use synchronized queue objects. These queue objects come from either the threading or multiprocessing module depending on which executor implementation you are using.&lt;/p&gt;

&lt;p&gt;So, I came up with &lt;a href="http://bugs.python.org/issue11635"&gt;a simple solution&lt;/a&gt;: I replaced this polling with a sentinel, the built-in sentinel named None. When a queue receives None, one waiting worker is naturally woken up and checks whether it should shutdown or not. In the ProcessPoolExecutor, there is a small complication as we need to wake up N worker processes in addition to the single &lt;span style="font-style: italic;"&gt;queue management thread&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;In my initial patch, I still had a polling timeout; a very large one (10 minutes) so that the workers would wake up at some point. The large timeout existed in case the code is buggy and they didn't get a shutdown notification through the aforementioned sentinel when they should. Out of curiousity, I dove into the multiprocessing source code and came to another interesting observation: under Windows, &lt;a href="http://docs.python.org/dev/library/multiprocessing.html#multiprocessing.Queue.get"&gt;multiprocessing.Queue.get()&lt;/a&gt; with a non-zero, non-infinite timeout uses...polling (for which I opened &lt;a href="http://bugs.python.org/issue11668"&gt;issue 11668&lt;/a&gt;). It uses an interesting high-frequency kind of polling, since it starts with a one millisecond timeout which is incremented at every loop iteration.&lt;/p&gt;

&lt;p&gt;Needless to say that still using a timeout, however huge, would render my patch useless under Windows since the way that timeout is implemented would involve wakeups every millisecond. So I bit the bullet and removed the huge polling timeout. My latest patch doesn't use a timeout at all, and therefore should cause no periodic wakeups, regardless of the platform.&lt;/p&gt;

&lt;p&gt;Historically speaking, before Python 3.2, every timeout facility in the threading module, and therefore in much of multiprocessing since multiprocessing itself uses worker threads for various tasks, used polling. This was fixed in &lt;a href="http://bugs.python.org/issue7316"&gt;issue 7316&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-2890677948571122030?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=31UaE_A6cIU:V9QJsDj8Rig:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=31UaE_A6cIU:V9QJsDj8Rig:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=31UaE_A6cIU:V9QJsDj8Rig:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=31UaE_A6cIU:V9QJsDj8Rig:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=31UaE_A6cIU:V9QJsDj8Rig:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=31UaE_A6cIU:V9QJsDj8Rig:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=31UaE_A6cIU:V9QJsDj8Rig:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=31UaE_A6cIU:V9QJsDj8Rig:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/31UaE_A6cIU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/2890677948571122030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/2890677948571122030?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/31UaE_A6cIU/of-polling-futures-and-parallel.html" title="Of polling, futures and parallel execution" /><author><name>Antoine P.</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/03/of-polling-futures-and-parallel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCSXg9eyp7ImA9WhZTGUo.&quot;"><id>tag:blogger.com,1999:blog-3941553907430899163.post-8614325495486710150</id><published>2011-03-24T08:00:00.000-04:00</published><updated>2011-03-24T09:44:28.663-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-24T09:44:28.663-04:00</app:edited><title>2011 Language Summit Report</title><content type="html">&lt;div class="document" id="language-summit-report"&gt;
&lt;p&gt;This year's Language Summit took place on Thursday March 10 in Atlanta, the day
before the conference portion of PyCon began. In attendance were members of the &lt;a class="reference external" href="http://www.python.org"&gt;CPython&lt;/a&gt;, &lt;a class="reference external" href="http://www.pypy.org"&gt;PyPy&lt;/a&gt;, &lt;a class="reference external" href="http://www.jython.org"&gt;Jython&lt;/a&gt;, &lt;a class="reference external" href="http://www.ironpython.net"&gt;IronPython&lt;/a&gt;, and &lt;a class="reference external" href="http://www.parrot.org"&gt;Parrot&lt;/a&gt; VMs; packaging developers from &lt;a class="reference external" href="http://www.fedoraproject.org"&gt;Fedora&lt;/a&gt;, &lt;a class="reference external" href="http://www.ubuntu.com"&gt;Ubuntu&lt;/a&gt;, and &lt;a class="reference external" href="http://www.debian.org"&gt;Debian&lt;/a&gt;; developers of the &lt;a class="reference external" href="http://www.twistedmatrix.com"&gt;Twisted&lt;/a&gt; project, and several others.&lt;/p&gt;
&lt;div class="section" id="development-blog"&gt;
&lt;h4&gt;Development Blog&lt;/h4&gt;
&lt;p&gt;One of the first orders of business was discussion of this very blog, initiated by PSF Communications Officer Doug Hellmann. Due to the high-traffic and often intense nature of the python-dev mailing-list, the blog hopes to be an easier way for users to get development news. We plan to cover PEPs, any major decisions, new features, and critical bug fixes, and will include informal coverage of what's going on in the development process.&lt;/p&gt;
&lt;p&gt;Posting to the blog is open to all implementations of Python. For example, while PyPy already has &lt;a class="reference external" href="http://morepypy.blogspot.com/"&gt;their own active blog&lt;/a&gt;, they are welcome to have news posted here as well. A related side discussion lead to the alternative implementations also being mentioned on the &lt;a class="reference external" href="http://python.org/download"&gt;python.org download page&lt;/a&gt;. Their releases will also be listed as news items on the &lt;a class="reference external" href="http://www.python.org"&gt;python.org&lt;/a&gt; front page.&lt;/p&gt;
&lt;/div&gt;&lt;div class="section" id="compatibility-warnings"&gt;&lt;h4&gt;Compatibility Warnings&lt;/h4&gt;&lt;p&gt;With 3.2, we introduced ResourceWarning to allow users to find areas of code that depend on CPython's reference counting. The warning not only helps users write better code, but allows them to write safer cross-VM code. To further cross-VM compatibility, a new warning type was suggested: CompatibilityWarning.&lt;/p&gt;&lt;p&gt;The idea came up due to a recently filed CPython bug found by the PyPy developers. &lt;a class="reference external" href="http://bugs.python.org/issue11455"&gt;Issue #11455&lt;/a&gt; explains a problem where CPython allows a user to create a type with non-string keys in its &lt;tt class="docutils literal"&gt;__dict__&lt;/tt&gt;, which at least PyPy and Jython do not support. Ideally, users could enable a warning to detect such cases, just as they do with ResourceWarning.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="standalone-standard-library"&gt;
&lt;h4&gt;Standalone Standard Library&lt;/h4&gt;&lt;p&gt;Now that the transition of CPython's source from Subversion to Mercurial has been completed, the idea of breaking out the standard library into its own repository was resurrected. The developers of alternative implementations are very interested in this conversion, as it would greatly simplify their development processes. They currently take a snapshot from CPython and apply any implementation specific patches, replace some C extensions with pure Python versions, etc.&lt;/p&gt;&lt;p&gt;The conversion will need to be laid out in an upcoming PEP, and one of the discussion points will be how versioning will be worked out. Since the library will live outside of any of the implementations, it would likely be versioned by itself, and the tests will need version considerations as well.&lt;/p&gt;&lt;p&gt;Another topic for the standard library breakout was pure Python implementations and their C extension counterparts. Maciej Fijalkowski of the PyPy project mentioned that over time, some modules have had minor feature differences between their C and Python versions. As discussion of the breakout goes on, the group suggested a more strict approach to changing such modules, as to not penalize the use of one or the other. Additionally, a preference on pure Python implementations was decided, with C implementations being created only in the event that a performance gain is achieved.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="performance-benchmark-site"&gt;&lt;h4&gt;Performance Benchmark Site&lt;/h4&gt;
&lt;p&gt;The PyPy Speed Center has done a great job of showing PyPy's performance results, and some discussion was had about hosting a similar site on python.org, possibly as performance.python.org for all VMs to take part in. In addition to performance benchmarks, others such as memory usage, test success, and language compatibility should be considered. Some effort will be needed to adapt the infrastructure to work with multiple Python implementations, as it currently tests PyPy vs. CPython.&lt;/p&gt;&lt;p&gt;Talk of putting some high-performance machines in the &lt;a class="reference external" href="http://osuosl.org/"&gt;Open Source Lab at Oregon State University&lt;/a&gt;, where Allison Randal is on the board, came up as a target for where the new Speed Center could live. Jesse Noller mentioned efforts to obtain hardware to put in the lab -- donations welcome!&lt;/p&gt;&lt;p&gt;If you or your organization are interested in donating for this cause or others, please contact the &lt;a class="reference external" href="http://www.python.org/psf/about"&gt;Python Software Foundation&lt;/a&gt; and check out our &lt;a class="reference external" href="http://www.python.org/psf/donations"&gt;donations page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="moratorium-lifted"&gt;&lt;h4&gt;Moratorium Lifted&lt;/h4&gt;&lt;p&gt;With the start of development on CPython 3.3, the moratorium on language changes has been lifted. While the flood gates are open, language changes are expected to be conservative while we try to slow the rate of change and continue to allow alternative implementations to catch up. Although no one caught up to the 3.x line thanks to the moratorium, PyPy and IronPython recently reached 2.7 compatibility, and IronPython is beginning down the road to 3.x.&lt;/p&gt;&lt;p&gt;As for what language changes are expected in 3.3, look forward to seeing &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0380/"&gt;PEP 380&lt;/a&gt; accepted. The PEP introduces a new &lt;tt class="docutils literal"&gt;yield from &amp;lt;expr&amp;gt;&lt;/tt&gt; syntax, allowing a generator to &lt;tt class="docutils literal"&gt;yield&lt;/tt&gt; to another generator. Other than this, no other language changes are expected in the near future.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="exception-attributes"&gt;&lt;h4&gt;Exception Attributes&lt;/h4&gt;&lt;p&gt;The next topic was a quick discussion on exceptions providing better attributes, rather than forcing users to rely on string messages. For example, on an ImportError, it would be useful to have easy access to the import which failed, rather than parsing to find it.&lt;/p&gt;&lt;p&gt;The implementation will likely rely on a keyword-only argument when initializing an exception object, and a patch currently exists for the &lt;a class="reference external" href="http://bugs.python.org/issue8754"&gt;ImportError case&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="contributor-agreements"&gt;&lt;h4&gt;Contributor Agreements&lt;/h4&gt;&lt;p&gt;Contributor agreements were also mentioned, and some form of electronic agreement is underway. Google's &lt;a class="reference external" href="http://code.google.com/legal/individual-cla-v1.0.html"&gt;individual contributor agreement&lt;/a&gt; was one of several inspirations for what the new system should work like. The topic has been long discussed, and many people are looking forward to a resolution in this area. Additionally, research is being done to ensure that any move to an electronic agreement remains valid in non-US jurisdictions.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="google-summer-of-code"&gt;&lt;h4&gt;Google Summer of Code&lt;/h4&gt;&lt;p&gt;Martin von Löwis took a minute to introduce another year of Google Summer of Code under the PSF umbrella. Developers are encouraged not only to act as mentors, but also to propose projects for students to work on -- and remember that suggesting a project does not imply that you will mentor it. If you are interested in helping in any way, see the PSF's &lt;a class="reference external" href="http://pyfound.blogspot.com/2011/03/google-summer-of-code-call-for-projects.html"&gt;Call for Projects and Mentors&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="distutils"&gt;&lt;h4&gt;Distutils&lt;/h4&gt;&lt;p&gt;&lt;a class="reference external" href="https://bitbucket.org/tarek/distutils2/wiki/Home"&gt;Distutils2&lt;/a&gt; came up and Tarek Ziadé mentioned that their sprint goal was to finish the port to Python 3 and prepare for the eventual merger back into the Python standard library. Additionally, with the merge comes a new name: &lt;tt class="docutils literal"&gt;packaging&lt;/tt&gt;. The packaging team also plans to provide a standalone package, still called Distutils2, supporting Python 2.4 through 3.2.&lt;/p&gt;&lt;p&gt;The result of the packaging sprint, which was one of the larger groups at the PyCon sprints, was very successful. Their current results are on &lt;a class="reference external" href="https://bitbucket.org/tarek/cpython"&gt;Bitbucket&lt;/a&gt;, awaiting the standard library merge.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="the-future-of-alternative-vms"&gt;&lt;h4&gt;The Future of Alternative VMs&lt;/h4&gt;&lt;p&gt;IronPython mentioned their future plans, and a 3.x release is next on their plate. They announced their 2.7.0 release at PyCon, their first community-based release since the project was handed off from Microsoft, and will be starting towards 3.x over the next few months.&lt;/p&gt;&lt;p&gt;Jython recently came out with a 2.5.2 release and have begun planning on a 2.6 release. Some suggested that they jump to 2.7, as the differences between 2.6 and 2.7 aren't all that great, but it may take longer to get a first release if they jump. &amp;quot;Release early, release often&amp;quot; was one of the quotes coming out of the talk, and they might be able to get away with going 2.6 to 3.x and considering any 2.6 to 2.7 differences after the fact.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="development-funding"&gt;&lt;h4&gt;Development Funding&lt;/h4&gt;&lt;p&gt;Coming out of the 3.x planning talks was the topic of funding for development work and how it might be able to speed up some of the alternative implementations getting to 3.x. While funds are available, a proposal to the PSF has to be made before anything can be discussed. Those interested in receiving grants for these efforts should contact the PSF board.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="baseline-python"&gt;&lt;h4&gt;Baseline Python&lt;/h4&gt;&lt;p&gt;Jim Fulton began a discussion on what he called &amp;quot;baseline&amp;quot; Python. In his experience deploying Python applications, he has found the system Python to be unpredictable and difficult to target. With Fedora and Ubuntu/Debian packaging experts on-hand, we were able to get a look into why things are the way they are.&lt;/p&gt;&lt;p&gt;For Fedora, the base Python install has the Live CD in mind, so it's a very minimal installation with few dependencies, basically the bare minimum to allow the system to run. Additional differences are seen in directory layouts, removal of standard library modules like distutils, or that the distribution provides out-of-date libraries.&lt;/p&gt;&lt;p&gt;There didn't appear to be a clear-cut solution right away, but the relevant parties will continue to work on the problem.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="features"&gt;&lt;h4&gt;3.3 Features&lt;/h4&gt;&lt;p&gt;Some thoughts for 3.3 features came up, including two PEPs. &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0382"&gt;PEP 382&lt;/a&gt;, covering Namespace Packages, should appear at some point in the cycle. It was also mentioned during the distutils merger topic.&lt;/p&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0393"&gt;PEP 393&lt;/a&gt;, defining a flexible string repesentation, was also up for discussion and also has some interested students as a GSoC project. Along with the implementation, some effort will need to be placed on the performance and memory characteristics of the new internals in order to see if they can be accepted.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="unladen-swallow"&gt;&lt;h4&gt;Unladen Swallow&lt;/h4&gt;&lt;p&gt;Unladen Swallow is currently in a &amp;quot;resting&amp;quot; state and will not be included in CPython 3.3 as-is.  To make further progress, we would need to identify several champions, as the domain experts are unavailable to do the work. During the discussion, it was again mentioned that if funding is what it would take to push Unladen Swallow to the next level, interested parties should apply to the PSF.&lt;/p&gt;&lt;p&gt;While Unladen Swallow is in its resting state and has an uncertain future, the project provided a large benefit to the Python and general open source community. The benchmark suite used by Unladen Swallow is very useful for testing alternative implementations, for example. Additionally, contributions to LLVM and Clang from the Unladen Swallow developers helped out those projects as well.&lt;/p&gt;&lt;p&gt;Two other performance ideas were also briefly discussed, including Dave Malcolm's function inlining proposal. Martin von Löwis mentioned a JIT extension module he has in the works, although the PyPy developers expressed skepticism of the effectiveness of a JIT of this kind.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="paving-a-path-to-asynchronous-frameworks"&gt;&lt;h4&gt;Paving a Path to Asynchronous Frameworks&lt;/h4&gt;&lt;p&gt;Ending the day was a discussion of some level of integration of Twisted into the standard library. The main idea is that an alternative to asyncore exists which allows for an easier transition to Twisted or other asynchronous programming frameworks.&lt;/p&gt;&lt;p&gt;The process will be laid out in an upcoming PEP, which some suggested would serve a purpose similar to the WSGI reference but for asynchronous event loops. Along with the PEP author(s), the Twisted project and others will need to put in effort to ensure everyone is on the same page.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="more-information"&gt;&lt;h4&gt;More Information&lt;/h4&gt;&lt;p&gt;For more information, see CPython developer Nick Coghlan's &lt;a class="reference external" href="http://www.boredomandlaziness.org/2011/03/python-language-summit-rough-notes.html"&gt;rough notes&lt;/a&gt; and &lt;a class="reference external" href="http://www.boredomandlaziness.org/2011/03/python-language-summit-highlights.html"&gt;highlights&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3941553907430899163-8614325495486710150?l=blog.python.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=m84Dg2l8szM:IGycu7C96Wc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=m84Dg2l8szM:IGycu7C96Wc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=m84Dg2l8szM:IGycu7C96Wc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=m84Dg2l8szM:IGycu7C96Wc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=m84Dg2l8szM:IGycu7C96Wc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=m84Dg2l8szM:IGycu7C96Wc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?i=m84Dg2l8szM:IGycu7C96Wc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PythonInsider?a=m84Dg2l8szM:IGycu7C96Wc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PythonInsider?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PythonInsider/~4/m84Dg2l8szM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8614325495486710150?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3941553907430899163/posts/default/8614325495486710150?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PythonInsider/~3/m84Dg2l8szM/2011-language-summit-report.html" title="2011 Language Summit Report" /><author><name>Brian Curtin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://blog.python.org/2011/03/2011-language-summit-report.html</feedburner:origLink></entry></feed>

