Differences between revisions 8 and 33 (spanning 25 versions)
Revision 8 as of 2006-10-27 15:01:23
Size: 1784
Editor: oxygen
Comment:
Revision 33 as of 2007-04-19 21:24:50
Size: 7241
Editor: oxygen
Comment: Updated with our current sprint activities
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Sprinting =

The BoulderSprint is a regular activity of the FrontRangePythoneers. We plan to hold these sprints on a monthly basis in 2007.
Line 2: Line 6:

= IPython1 Sprint =
Line 5: Line 11:
 * November 4, 2006 (Saturday), 9 AM - 6 PM  * April 28, 2007 (Saturday), 9 AM - 6 PM
Line 9: Line 15:
[http://www.bivio.biz bivio Software, Inc.], 28th and Iris. Above Hair Elite in Suite S. [http://maps.google.com/maps?f=q&hl=en&q=2701+Iris+Ave.,+Boulder+CO&ie=UTF8&z=15&om=1&iwloc=A Google Maps link] [http://www.bivio.biz/ bivio Software, Inc.], 28th and Iris. Above Hair Elite in Suite S. [http://maps.google.com/maps?f=q&hl=en&q=2701+Iris+Ave.,+Boulder+CO&ie=UTF8&z=15&om=1&iwloc=A Google Maps link]
Line 11: Line 17:
Thanks to Alex Viggio, Eric Dobbs, and Rob Nagler of bivio for generously providing us this sprint space. == Project ==
Line 13: Line 19:
== Projects == Summary:
IPython1 is a beefed-up version of the python interactive interpreter that enables parallel computing. It's the next generation of the indispensible IPython shell.

We're going to caffeinate and code and get this amazing codebase to beta status.

Your homework:
 * Visit http://ipython.scipy.org/moin/IPython1
 * Thoroughly read the wiki pages relating to IPython1
 * Check out the "saw" branch (not "chainsaw") as described at http://ipython.scipy.org/moin/Developer_Zone
 * Run the test suite against the saw branch

This shouldn't take more than an hour or two, and will ensure we all have a base level of familiarity with the project that will help us hit the ground running.

In addition, Fernando plans to use Mercurial for distributed version control during the sprint, so you should install and familiarize yourself with that software if time permits.

= Previous Sprints =

== Jython Sprints ==

 * January 6, 2007 (Saturday), 9 AM - 6 PM
 * February ??, 2007 (Saturday), 9 AM - 6 PM

Update Jython. [http://wiki.python.org/jython/MovingJythonForward Brian Zimmer's proposal] is an useful outline of what needs to be done technically. Perhaps even more importantly, there are some key engineering challenges to be addressed to ensure overall project success. Because of the scope of the work, we are looking at this as preliminary to [http://us.pycon.org/TX2007/Sprints a 4-day sprint at PyCon]. More here at JythonSprint.

== Participants ==

 0. Eric Dobbs
 0. Bill Simons
 0. Matt Boersma
 0. Kip Lehman
 0. Jim Baker

== Django-Oracle Project ==

November 4, 2006 (Saturday), 9 AM - 6 PM
Line 16: Line 56:

UPDATE: Thanks to the hard work of Ian Kelly, this code is basically complete. We're submitting a patch for Oracle support back to the trunk today (April 19, 2007). Lots of people had a hand in these changes, so congratulations are in order for everyone!
Line 24: Line 66:
== Preliminary Tasks ==
(Many of these are refinements and performance improvements that we won't get to, since we're focused only on correct behavior right now. But several of us reviewed the code and didn't want to lose any feedback. After the sprint, we will enter the outstanding issues in [http://code.djangoproject.com/newticket the Django project Trac].)

 * Use ROWNUM, not LIMIT 1. Oracle guru Tom Kyte addresses this in a recent [http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html article] in Oracle magazine. It boils down to using a doubly nested subquery.
 * Create LOB columns out-of-line
 * Need a way to explicitly specify TABLESPACE for table creation
 * (Done) CREATE [SEQUENCE|CONSTRAINTS] gets logged twice
 * (Done) backend creates LONG columns, should use CLOBs instead
 * (Done) backend may create two LONG columns, but Oracle allows one per table (don't use LONG columns... solved by using CLOBs)
 * In "syncdb", foreign keys should be created as a second pass after table creation, using ALTER statements. Otherwise the DDL will reference tables not yet created, and Oracle throws errors.
 * (Done) Primary key "id" column (AutoField) is NUMBER(38) in creation.py. Does it need to be that large? No it doesn't.
 * "syncdb" should always create indexes for foreign key columns, or Oracle will optimize poorly
 * "syncdb" doesn't check for table existence before running table creation SQL?
 * (Done--as is) FormatStylePlaceholderCursor object: is it needed? We thought cx_Oracle already did named params...
 * fulltext search isn't supported
 * Use INSTR instead of costly LIKE for the endswith construct (LIKE %s) ?
 * (Partially done) get_indexes() and get_relations() unimplemented. Use USER_CONSTRAINTS and USER_INDEXES from Oracle.
 * (Done) SlugField, PhoneNumberField, etc., use VARCHAR and CHAR, but all should use VARCHAR2 consistently.
 * TimeField should use "INTERVAL DAY TO SECOND" datatype
 * (Done) NullBooleanField should be NUMBER(1) like BooleanField, not NUMBER(38)
 * (Done) Don't use Oracle's non-native Integer and SmallInteger types, which result in a NUMBER(38).
 * XmlField unimplemented, although Oracle now has native support for this.
 * In db/models/base.py, should use COUNT(*) instead of Oracle LIMIT 1 conditional test
 * Create a function-based index on lower() columns, or else check if DB is Oracle 10g
 * move query.py oracle tests out to the db module
 * Which versions of Oracle do we need to support? (9i and 10g, hopefully, although old versions of cx_Oracle still support 8i)
 * Good comment from Winston Lee: "I think the biggest issue is the restriction of only one LONG field type on a table. This means that NCLOB will need to be used for TextField? in creation.py. cx_Oracle will then return NCLOB field as a cx_Oracle.LOB. I thought that it would be possible to use cx_Oracle.Connection.register to hook into the return and read the LOB object but it should really be a lazy fetch."
 * Add more Monty Python references to the code.
Line 27: Line 98:
 0. Matt Boersma
0. Matt Drew
 0. Matt Boersma, Aries, the man with the plan
Line 30: Line 100:
 0. Ian Kelly  0. Ian Kelly, Pisces, he who shall do all the work
 0. Matt Drew, Capricorn, master pizza orderer
 0. Michelle Cyr, Cancer, senior ice cream fetcher
 0. Jacob Kaplan-Moss, lead Django developer!
 0. Malcolm Tredinnick (working remotely from Sydney -- with the flu, no less!)
 0. Mitchell W. Smith, Virgo, schwag coordinator
Line 35: Line 110:

== Photo Stream ==

 * Nov 4, 2006 [http://www.flickr.com/search/?w=all&q=bouldersprint Photos]

Sprinting

The BoulderSprint is a regular activity of the FrontRangePythoneers. We plan to hold these sprints on a monthly basis in 2007.

For more information about sprints in general, read the SprintIntroduction page. SteveHolden has a useful [http://www.onlamp.com/pub/a/python/2006/10/19/running-a-sprint.html article] in the [http://www.onlamp.com/python/ OnLamp Python DevCenter ] on how to run a sprint.

IPython1 Sprint

Date/time

  • April 28, 2007 (Saturday), 9 AM - 6 PM

Location

[http://www.bivio.biz/ bivio Software, Inc.], 28th and Iris. Above Hair Elite in Suite S. [http://maps.google.com/maps?f=q&hl=en&q=2701+Iris+Ave.,+Boulder+CO&ie=UTF8&z=15&om=1&iwloc=A Google Maps link]

Project

Summary: IPython1 is a beefed-up version of the python interactive interpreter that enables parallel computing. It's the next generation of the indispensible IPython shell.

We're going to caffeinate and code and get this amazing codebase to beta status.

Your homework:

This shouldn't take more than an hour or two, and will ensure we all have a base level of familiarity with the project that will help us hit the ground running.

In addition, Fernando plans to use Mercurial for distributed version control during the sprint, so you should install and familiarize yourself with that software if time permits.

Previous Sprints

Jython Sprints

  • January 6, 2007 (Saturday), 9 AM - 6 PM
  • February ??, 2007 (Saturday), 9 AM - 6 PM

Update Jython. [http://wiki.python.org/jython/MovingJythonForward Brian Zimmer's proposal] is an useful outline of what needs to be done technically. Perhaps even more importantly, there are some key engineering challenges to be addressed to ensure overall project success. Because of the scope of the work, we are looking at this as preliminary to [http://us.pycon.org/TX2007/Sprints a 4-day sprint at PyCon]. More here at JythonSprint.

Participants

  1. Eric Dobbs
  2. Bill Simons
  3. Matt Boersma
  4. Kip Lehman
  5. Jim Baker

Django-Oracle Project

November 4, 2006 (Saturday), 9 AM - 6 PM

Complete support for Oracle in Django in time for 1.0. Suggested by Matt Boersma.

UPDATE: Thanks to the hard work of Ian Kelly, this code is basically complete. We're submitting a patch for Oracle support back to the trunk today (April 19, 2007). Lots of people had a hand in these changes, so congratulations are in order for everyone!

Specifically, we would like to build on the good work already done by the Django community to produce a single patch that can be applied to current subversion sources, enabling Django's ORM to pass basic tests against an Oracle database. The current patches available have Oracle-specific conditional tests in many locations; we will try to confine such code to the django.db.backends.oracle package.

References

The bug report stipulating Oracle support by Django version 1.0 is here: http://code.djangoproject.com/ticket/1990

Preliminary Tasks

(Many of these are refinements and performance improvements that we won't get to, since we're focused only on correct behavior right now. But several of us reviewed the code and didn't want to lose any feedback. After the sprint, we will enter the outstanding issues in [http://code.djangoproject.com/newticket the Django project Trac].)

  • Use ROWNUM, not LIMIT 1. Oracle guru Tom Kyte addresses this in a recent [http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html article] in Oracle magazine. It boils down to using a doubly nested subquery.

  • Create LOB columns out-of-line
  • Need a way to explicitly specify TABLESPACE for table creation
  • (Done) CREATE [SEQUENCE|CONSTRAINTS] gets logged twice
  • (Done) backend creates LONG columns, should use CLOBs instead
  • (Done) backend may create two LONG columns, but Oracle allows one per table (don't use LONG columns... solved by using CLOBs)
  • In "syncdb", foreign keys should be created as a second pass after table creation, using ALTER statements. Otherwise the DDL will reference tables not yet created, and Oracle throws errors.
  • (Done) Primary key "id" column (AutoField) is NUMBER(38) in creation.py. Does it need to be that large? No it doesn't.

  • "syncdb" should always create indexes for foreign key columns, or Oracle will optimize poorly
  • "syncdb" doesn't check for table existence before running table creation SQL?
  • (Done--as is) FormatStylePlaceholderCursor object: is it needed? We thought cx_Oracle already did named params...

  • fulltext search isn't supported
  • Use INSTR instead of costly LIKE for the endswith construct (LIKE %s) ?
  • (Partially done) get_indexes() and get_relations() unimplemented. Use USER_CONSTRAINTS and USER_INDEXES from Oracle.
  • (Done) SlugField, PhoneNumberField, etc., use VARCHAR and CHAR, but all should use VARCHAR2 consistently.

  • TimeField should use "INTERVAL DAY TO SECOND" datatype

  • (Done) NullBooleanField should be NUMBER(1) like BooleanField, not NUMBER(38)

  • (Done) Don't use Oracle's non-native Integer and SmallInteger types, which result in a NUMBER(38).

  • XmlField unimplemented, although Oracle now has native support for this.

  • In db/models/base.py, should use COUNT(*) instead of Oracle LIMIT 1 conditional test
  • Create a function-based index on lower() columns, or else check if DB is Oracle 10g
  • move query.py oracle tests out to the db module
  • Which versions of Oracle do we need to support? (9i and 10g, hopefully, although old versions of cx_Oracle still support 8i)
  • Good comment from Winston Lee: "I think the biggest issue is the restriction of only one LONG field type on a table. This means that NCLOB will need to be used for TextField? in creation.py. cx_Oracle will then return NCLOB field as a cx_Oracle.LOB. I thought that it would be possible to use cx_Oracle.Connection.register to hook into the return and read the LOB object but it should really be a lazy fetch."

  • Add more Monty Python references to the code.

Participants

  1. Jim Baker
  2. Matt Boersma, Aries, the man with the plan
  3. Eric Dobbs
  4. Ian Kelly, Pisces, he who shall do all the work
  5. Matt Drew, Capricorn, master pizza orderer
  6. Michelle Cyr, Cancer, senior ice cream fetcher
  7. Jacob Kaplan-Moss, lead Django developer!
  8. Malcolm Tredinnick (working remotely from Sydney -- with the flu, no less!)
  9. Mitchell W. Smith, Virgo, schwag coordinator

Post Sprint Party

Some of us are planning to go to the [http://www.bouldercuba.org/ Cuban Connection fundraiser], 6 PM - 1 AM, St. Julien Hotel (our favorite meeting place for FrontRangePythoneers). In addition to raising money for a good cause, this will be a chance to stretch our weary coding muscles while dancing salsa to Quemando and Havana NRG.

Photo Stream

BoulderSprint (last edited 2008-11-15 13:59:57 by localhost)

Unable to edit the page? See the FrontPage for instructions.