<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-36545422</id><updated>2008-01-29T11:15:28.179-07:00</updated><title type='text'>Front Range Pythoneering</title><link rel='alternate' type='text/html' href='http://zyasoft.com/pythoneering/'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zyasoft.com/pythoneering/atom.xml'/><author><name>Jim Baker</name></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36545422.post-4670751183434309138</id><published>2008-01-03T21:59:00.000-07:00</published><updated>2008-01-03T22:09:45.249-07:00</updated><title type='text'>Django on Jython: Minding the Gap</title><content type='html'>&lt;h2 id="head-8fbbb7c7d944ae3ef8c1b25b14973ac30ab623f3"&gt;Summary&lt;br /&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-4"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-5"&gt;&lt;/span&gt;&lt;p class="line874"&gt;The most important thing to know about Django on Jython is that we are almost there, and with clean code. End-to-end functionality is demonstrated by the admin tool running in full CRUD, along with a substantial number of unit tests and syncdb. But this has been achieved by so far requiring only 6 lines of code in changes to Django trunk. (There will be more, however, see below.) &lt;span class="anchor" id="line-6"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-7"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-2e3a2553c8f5122907bb333b9ce6c0d3bbc08843"&gt;Running on Jython&lt;/h2&gt; &lt;span class="anchor" id="line-8"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-9"&gt;&lt;/span&gt;&lt;p class="line874"&gt;To run Django on Jython, with a PostgreSQL backend, the following steps are necessary: &lt;span class="anchor" id="line-10"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-11"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p class="line862"&gt;Use the &lt;a class="https" href="https://jython.svn.sourceforge.net/svnroot/jython/branches/modern/"&gt;Modern branch&lt;/a&gt; of Jython. This consolidated the &lt;a href="http://wiki.python.org/jython/DjangoOnJython"&gt;bugs, workarounds, and patches&lt;/a&gt; of numerous people - plus a bunch more - in a stable, almost-ready-to-be-merged-into-trunk version of Jython. The most important aspect is that we have tried to make Jython conform more to CPython, using Django as our guide, although there are some gaps - especially if Django already had incorporated fixes. Our driving goal is to converge on these gaps over time. Please note that is intended to be stable, performant code. &lt;/p&gt;&lt;/li&gt;&lt;li class="gap"&gt;Use the Django trunk (tested with rev 6992, later should be OK too). &lt;span class="anchor" id="line-14"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-15"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="gap"&gt;&lt;p class="line862"&gt;Apply these two patches, &lt;a class="https" href="https://jython.svn.sourceforge.net/svnroot/jython/trunk/sandbox/jbaker/django/dispatch/robustapply.py"&gt;django.dispatch.robustapply&lt;/a&gt; (&lt;a class="https" href="https://hg.leosoto.com/django.jythonport/rev/bb2b9048ed14f72e99c5c133c7ecaaeb0a5c425c"&gt;diff&lt;/a&gt;) and &lt;a class="https" href="https://jython.svn.sourceforge.net/svnroot/jython/trunk/sandbox/jbaker/django/views/debug.py"&gt;django.views.debug&lt;/a&gt; (&lt;a class="https" href="https://hg.leosoto.com/django.jythonport/rev/663bcf5efc31409899fcdc10009bc92df3e1f6b9"&gt;diff&lt;/a&gt;) due to Leo Soto. I would imagine these will be in Django trunk soon. &lt;span class="anchor" id="line-16"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-17"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="gap"&gt;Copy these three files from CPythonLib to Lib: gettext.py, locale.py, optparse.py. Please note that these files are only partially working on Jython, that's why they haven't been promoted yet (gettext.py actually works, as verified by test_gettext.py, but depends on still failing locale.py). But they are very close, and they appear to be fine for Django. Certainly fine for this round of development! &lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="gap"&gt;&lt;p class="line862"&gt;Use the database backend &lt;a class="https" href="https://jython.svn.sourceforge.net/svnroot/jython/trunk/sandbox/jbaker/django/db/backends/postgresql_zxjdbc/"&gt;zxjdbc_postgresql&lt;/a&gt;, which was contributed by Leo Soto. Frank Wierzbicki has an experimental backend for MySQL, this should be incorporated soon. &lt;span class="anchor" id="line-20"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-3b7c8bf33a146c28297661cea835665d074d7087"&gt;Status&lt;/h2&gt; &lt;span class="anchor" id="line-22"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-23"&gt;&lt;/span&gt;&lt;p class="line874"&gt;Here's what works: &lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="line862"&gt;syncdb and the very cool Django admin run; many unit tests pass. You can run with internationalization enabled. You do need to run the dev server with --noreload for now. We need to document here how to run with &lt;a class="http" href="http://www.xhaus.com/modjy/"&gt;modjy&lt;/a&gt;, which is Alan Kennedy's servlet container for WSGI apps. &lt;span class="anchor" id="line-26"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-27"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="line874"&gt;In running the model unit tests, here are the things we seem to be missing, accounting for most of the approximately 75 failures: &lt;span class="anchor" id="line-28"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-29"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p class="line862"&gt;Many doctests are fragile, because they depend on the dict traversal ordering; in Jython, this is different that CPython, and if we adopt &lt;tt&gt;ConcurrentHashMap&lt;/tt&gt;, it's not even repeatable. This would seem to be a pervasive bug in Django. &lt;span class="anchor" id="line-30"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-31"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="gap"&gt;&lt;p class="line862"&gt;We still have some encoding problems, again seen in doctests. An example where output is expected to be lower case hex, not upper case. I fixed the problem in &lt;tt&gt;PyUnicode&lt;/tt&gt;, but there are more places. &lt;span class="anchor" id="line-32"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-33"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="gap"&gt;&lt;p class="line862"&gt;Problem with the &lt;tt&gt;ManagerDescriptor&lt;/tt&gt; handling, in &lt;tt&gt;django.db.models.manager&lt;/tt&gt;. &lt;span class="anchor" id="line-34"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-35"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="gap"&gt;No decorators yet! (But they are coming soon, and are now available experimentally for Jython in the newcompiler work I have been leading.)  &lt;span class="anchor" id="line-36"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-37"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="line874"&gt;There may be some other rough categories, we need to look at the failures more systematically. All that doctest noise is certainly annoying! &lt;span class="anchor" id="line-38"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-39"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-24863f234dc1b6e7721b458448e2fc832a7247b2"&gt;Next Steps&lt;/h2&gt; &lt;span class="anchor" id="line-40"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-41"&gt;&lt;/span&gt;&lt;p class="line874"&gt;On the Django front, get more of the unit tests running! &lt;span class="anchor" id="line-42"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-43"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="line874"&gt;Before we can push modern into trunk, the following needs to be done: &lt;span class="anchor" id="line-44"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-45"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p class="line862"&gt;The test_extcall unit test currently fails. This appears to be a dependency on &lt;tt&gt;dict&lt;/tt&gt; traversal being repeatable, a bad assumption. However, it's a mind bending test. The 2.3 version is particularly problematic because it's not modular at all. Google's GHOP has just produced an improved version for Python 2.6 - we will look at this as a starting point. &lt;span class="anchor" id="line-46"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-47"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="gap"&gt;&lt;p class="line862"&gt;Tristan King provided a near complete subset of the functionality for &lt;tt&gt;time.strptime&lt;/tt&gt;, as implemented in &lt;tt&gt;org.python.modules.time.Time&lt;/tt&gt;. This needs to be enhanced. I just tested this, and all unit tests in the CPythonLib version of test_time now pass except for &lt;tt&gt;strptime&lt;/tt&gt; -- specifically the conversion specifier &lt;tt&gt;'%c'&lt;/tt&gt; -- so we can also move to that, and discard our Jython version, when this is completed. That should be soon! &lt;span class="anchor" id="line-48"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-49"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="gap"&gt;&lt;p class="line862"&gt;Decide whether we should use &lt;tt&gt;ConcurentHashMap&lt;/tt&gt; or not as the backing hash map for &lt;tt&gt;dict&lt;/tt&gt; and &lt;tt&gt;__dict__&lt;/tt&gt;. CHM introduces creation overhead, but it should prove to be far more scalable on multicore systems. The programming model is also far nicer with respect to Jython.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='alternate' type='text/html' href='http://zyasoft.com/pythoneering/2008/01/django-on-jython-minding-gap.html' title='Django on Jython: Minding the Gap'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36545422&amp;postID=4670751183434309138' title='19 Comments'/><link rel='replies' type='application/atom+xml' href='http://zyasoft.com/pythoneering/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/4670751183434309138'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/4670751183434309138'/><author><name>Jim Baker</name></author></entry><entry><id>tag:blogger.com,1999:blog-36545422.post-6255584078315038108</id><published>2006-12-16T09:17:00.000-07:00</published><updated>2006-12-16T09:20:40.566-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jython'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='boulder'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>Pythoneers Monthly Meeting: This Wednesday, December 20, in Boulder, Colorado</title><content type='html'>&lt;div class="moz-text-html" lang="x-unicode"&gt;       &lt;!--[endif]--&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;&lt;b&gt;Important Change: we will be meeting at bivio Software instead of Jill's to better accommodate this month's demos.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt; &lt;p&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;This coming Wednesday (December 20) we are having our monthly meeting for the Front Ranage Pythoneers. Come join a lively discussion of Python demos, features, tips &amp; techniques, and directions, both for fun and professional development.&lt;br /&gt;&lt;br /&gt;Here are the meeting specifics:&lt;br /&gt;&lt;/span&gt; &lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;&lt;span style="font-style: italic;"&gt;Date/time&lt;/span&gt;: Wednesday, December 20, 6-8 PM&lt;br /&gt;  &lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;&lt;span style="font-style: italic;"&gt;Location&lt;/span&gt;: &lt;a class="external" href="http://www.bivio.biz/"&gt;bivio Software, Inc.&lt;/a&gt;, 28th and Iris. Above Hair Elite in Suite S. &lt;a class="external" href="http://maps.google.com/maps?f=q&amp;hl=en&amp;amp;q=2701+Iris+Ave.,+Boulder+CO&amp;amp;ie=UTF8&amp;z=15&amp;amp;om=1&amp;iwloc=A"&gt;Google Maps link&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;Tom Churchill and Vinny will demo &lt;a href="http://www.churchillnavigation.com/"&gt;Churchill Navigation's&lt;/a&gt; earth-rendering engine (which looks like Google Earth, only apparently even better and faster ;) ). Vinny (their main Python guy) will explain how they built the glue logic (and why they decided against SWIG) and perhaps some of the implications of using Python as a scripting language in a real-time (60 fps) environment, and the techniques we employed to keep the graphics pipeline from stalling when making an expensive call into their engine from Python.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;Brian Granger from &lt;a href="http://txcorp.com/"&gt;Tech-X&lt;/a&gt; will help us think more deeply about concurrent Python programming, especially as seen in a new version of &lt;a href="http://ipython.scipy.org/moin/IPython1"&gt;IPython&lt;/a&gt; he has been working on.&lt;br /&gt;  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;&lt;a href="http://wiki.python.org/moin/BoulderSprint"&gt;BoulderSprint&lt;/a&gt;. Eric Dobbs proposed we adopt Jython, and this looks like we have enough momentum to actually get some useful work done. We will talk about the upcoming sprint to be held on Saturday, January 6.&lt;br /&gt;  &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;We will have food &amp;amp; drink available. Did I mention the &lt;u&gt;free beer&lt;/u&gt;? Hope to see you there.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Helvetica,Arial,sans-serif;"&gt;&lt;br /&gt;- Jim&lt;/span&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt; &lt;/div&gt;</content><link rel='alternate' type='text/html' href='http://zyasoft.com/pythoneering/2006/12/pythoneers-monthly-meeting-this_16.html' title='Pythoneers Monthly Meeting: This Wednesday, December 20, in Boulder, Colorado'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36545422&amp;postID=6255584078315038108' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://zyasoft.com/pythoneering/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/6255584078315038108'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/6255584078315038108'/><author><name>Jim Baker</name></author></entry><entry><id>tag:blogger.com,1999:blog-36545422.post-116321490211840402</id><published>2006-11-10T19:55:00.000-07:00</published><updated>2006-11-10T20:42:04.826-07:00</updated><title type='text'>Pythoneers Monthly Meeting - This Wednesday, Nov 15, in Boulder, Colorado</title><content type='html'>This coming Wednesday (November 15) we are having our monthly meeting for the Front Range Pythoneers. &lt;b&gt;Please note, we have moved to &lt;u&gt;Jill's at the St Julien Hotel.&lt;/u&gt;&lt;/b&gt; Come join a lively discussion of Python features, tips &amp;amp; techniques, and directions, both for fun and professional development.&lt;br /&gt;&lt;br /&gt;Here are the meeting specifics:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Status&lt;/i&gt;: &lt;b&gt;Always on&lt;/b&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Date/time&lt;/i&gt;: Every 3rd Wednesday, 6-8 PM&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Location&lt;/i&gt;: Jill's at the &lt;a href="http://www.stjulien.com"&gt;St Julien Hotel&lt;/a&gt; (9th and Walnut), the bar area. Jill's combines a beautiful room, great food and beverages, and happy-hour pricing. And for this meeting: your first draft beer (up to 20 people) is &lt;b&gt;free&lt;/b&gt;!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Hope to see you there.&lt;br /&gt;&lt;br /&gt;We've recently set up a &lt;a href="http://wiki.python.org/moin/FrontRangePythoneers"&gt;wiki&lt;/a&gt;. There, you can help us expand the Guide to Front Range Pythoneering. Or contribute ideas to future &lt;a href="http://wiki.python.org/moin/FrontRangePythoneers"&gt;sprints&lt;/a&gt; and &lt;a href="http://wiki.python.org/moin/BoulderJam"&gt;jams.&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://zyasoft.com/pythoneering/2006/11/pythoneers-monthly-meeting-this.html' title='Pythoneers Monthly Meeting - This Wednesday, Nov 15, in Boulder, Colorado'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36545422&amp;postID=116321490211840402' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://zyasoft.com/pythoneering/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/116321490211840402'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/116321490211840402'/><author><name>Jim Baker</name></author></entry><entry><id>tag:blogger.com,1999:blog-36545422.post-116284544463044368</id><published>2006-11-06T12:08:00.000-07:00</published><updated>2006-11-06T15:22:09.700-07:00</updated><title type='text'>Boulder Sprint: Adding Oracle support to Django</title><content type='html'>We had a great turnout on Saturday for the first &lt;a href="http://wiki.python.org/moin/BoulderSprint"&gt;Boulder Sprint&lt;/a&gt; held by the &lt;a href="http://www.fr.co.us.pythoneers.org/"&gt;Front Range Pythoneers&lt;/a&gt;.  Our goal was to provide &lt;a href="http://code.djangoproject.com/ticket/1990"&gt;production-level support of Oracle&lt;/a&gt; in Django 1.0.  I'm glad to report that we made a strong start on this goal.&lt;br /&gt;&lt;br /&gt;Django developer Jacob Kaplan-Moss flew out to Boulder from Lawrence, Kansas, providing us both leadership and guidance into the Django internals. (Next time I hope Jacob doesn't have to fly out the next day on a 6 AM flight!)  From Array Biopharma, we had five developers: Ian Kelly, Matt Boersma, Matt Drew, Michelle Cyr, and Mitch Smith. Eric Dobbs, of Bivio, contributed both the space and his seasoned Python skills. And there was me (Jim Baker). Thanks to everyone for your hard work!&lt;br /&gt;&lt;br /&gt;We worked on a number of key issues for supporting Oracle:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Perhaps most important, Jacob split out Oracle-specific functionality into the Oracle backend, allowing for more modularity. Django uses quite portable code, in conjunction with the Python DB2 API, but Oracle has its peculiarities. Being pragmatic, we had to work through that.&lt;/li&gt;&lt;li&gt;Mapping Django's TextFields to Oracle's CLOBs, not LONGs, which pretty much are deprecated. (Remember Django's origin, we certainly need support for text!) However, supporting CLOBs required some changes: no buffering in the Python layer, just iterate directly over the cursor; explicitly read in data from the LOB reference; prepare the OCI by giving cx_Oracle explicit type information (also necessary for timestamps with greater than one second precision).&lt;/li&gt;&lt;li&gt;Pagination queries. Django's ORM grew out of supporting PostgreSQL, which has OFFSET and LIMIT clauses, useful for the pagination queries often seen in stateless web apps. Oracle actually has quite good support for this type of queries but this fact is not well-known. And frankly it's a bit clumsy to use, requiring doubly nested subqueries. See Oracle guru Tom Kyte's &lt;a href="http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html"&gt;article&lt;/a&gt; in Oracle magazine for more details.  I made some progress on this front, but I still need to integrate it into the new django.db.backends.oracle.OracleQuerySet class added by Jacob.&lt;/li&gt;&lt;li&gt;Test schema support. Oracle uses the concept of "user schema" where other databases might use "database". There's a bit of trickiness in working appropriately with this, especially if there are tablespaces being set up for this test. Eric took the lead on this.&lt;/li&gt;&lt;li&gt;Mitch Smith wrote two gnarly Oracle-specific queries that have almost got&lt;br /&gt;introspection and Django's "inspectdb" command working correctly.&lt;/li&gt;&lt;li&gt;Part of our goal was to get all existing tests to pass from  runtests.py, and we're about 70% there.&lt;/li&gt;&lt;li&gt;Array Biopharma now has their test web app, donuts, running.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;And this is just what I saw from my side of the conference room table! We do have a &lt;a href="http://www.flickr.com/photos/tags/bouldersprint/"&gt;photostream&lt;/a&gt; for the Boulder Sprint. Check out Matt B. and Michelle &lt;a href="http://www.flickr.com/photos/67001115@N00/288564942/"&gt;contemplating at the Oracle&lt;/a&gt;. Or Matt B. and Ian &lt;a href="http://www.flickr.com/photos/67001115@N00/288962041/"&gt;asking rhetorically&lt;/a&gt;, "How can we screw up a 3-line function?" There is also a &lt;a href="http://wiki.python.org/moin/BoulderSprint"&gt;wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For the moment, until we get the work integrated in the Django trunk, you can checkout the Boulder Sprint branch here with Subversion:&lt;br /&gt;&lt;br /&gt;svn co http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint</content><link rel='alternate' type='text/html' href='http://zyasoft.com/pythoneering/2006/11/boulder-sprint-adding-oracle-support.html' title='Boulder Sprint: Adding Oracle support to Django'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36545422&amp;postID=116284544463044368' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://zyasoft.com/pythoneering/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/116284544463044368'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/116284544463044368'/><author><name>Jim Baker</name></author></entry><entry><id>tag:blogger.com,1999:blog-36545422.post-116231583891324596</id><published>2006-10-31T10:30:00.000-07:00</published><updated>2006-10-31T10:31:37.526-07:00</updated><title type='text'>Boulder Sprint this Saturday</title><content type='html'>On November 4, 9 AM-6 PM, the Front Range Pythoneers is holding a sprint to complete the support for Oracle in Django. Why might you want to attend? Whether you're interested in Django, portable object-relational mapping code, how to optimize an Oracle execution plan for generated SQL, or just doing some intensive coding in Python, this should be a great opportunity to learn and contribute.&lt;br /&gt;&lt;br /&gt;See the wiki for more details: http://wiki.python.org/moin/BoulderSprint</content><link rel='alternate' type='text/html' href='http://zyasoft.com/pythoneering/2006/10/boulder-sprint-this-saturday_31.html' title='Boulder Sprint this Saturday'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36545422&amp;postID=116231583891324596' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://zyasoft.com/pythoneering/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/116231583891324596'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36545422/posts/default/116231583891324596'/><author><name>Jim Baker</name></author></entry></feed>