DjangoCon09: No! Bad Pony! - Presentation Transcript
No! Bad Pony!
Dr Russell Keith-Magee
DjangoCon 2009
wotnews.com.au
wotnews.com
wotnews.co.uk
wearehunted.com
how is ponny formed?
Genesis of the pony
Cal Henderson @ DjangoCon2008
What does it mean?
What is a pony?
What turns an idea
into a bad pony?
It’s an idea that...
• Is just plain wrong
• Is impractical
• Isn’t a good fit for Django’s design
• Takes the project in the wrong direction
• Comes without an offer of assistance
Ideas that are wrong
Ideas that are wrong
• Idea violates a standard or best practice
• Idea can’t be implemented
• Rusty Russell Interface Level too high
• Idea violates DRY
Impractical ideas
Impractical ideas
• A problem that doesn’t exist:YAGNI
• Changes the design contract
• Addresses a small part of larger problem
• Architecture astronauting
Design Mismatch
Replace X with Y
• Replace Django’s templates with Jinga
• Replace ORM with SQLAlchemy
• Replace test framework with Nose
Ignores the philosophy
• Add GROUP BY, HAVING to ORM
• Add variables/callables to template language
• Add AJAX to Forms
Just add a setting...
• A setting is a decision deferred
• N settings, 2 configurations
N
• Doesn’t mean we won’t add settings
Wrong direction
Feature creep
• Make development server multithreaded
• Add connection pooling
Add a backend...
• MS-SQL / DB2 / SQLAnywhere / Firebird
• New authentication schemes (LDAP)
• New serialization schemes (CSV)
• New file stores (S3)
Put another way...
• You say “Add X to core”
• We hear:
• “Here’s something else to worry about”
• “Won’t you look after this for me”
• We introduce backend APIs for a reason
The Community
• The core doesn’t have to do everything
• In fact - the core can’t do everything
• The community has an essential role here
• Blessing by core doesn’t make code better
Add X to contrib
• django-tagging
• django-registration
• django-debug-toolbar
What is django.contrib?
A collection of
optional,
defacto standard
implementations of
common patterns
Here’s a big job...
but I’d like someone else to do it (please)
Process Ponies
• Write more blog posts
• Have a weekly news summary
• Have a nightly tarball download
• Have a continuous build
• Have precompiled PDF documentation
Massive Features
• Support for multiple database connections
• Schema Evolution
• Support for non-SQL data stores
Some popular tickets
Almost certainly in 1.2
• #5390 - Signals for ManyRelatedManager
• #7052 - Problems with auth fixture loading
Possibly in 1.2
• #13 - Better related objects admin UI
• #1142 - Multiple database support
• #5833 - Custom Filterspecs
• #6845 - Model Validation
Waiting on patch
• #373 - Multi-column primary keys
• #2879 - Live test server support
• #4102 - Update of specific fields
• #6148 - Database schemas
• #6735 - Class-based generic views
• #7270 - Reverse select_related()
Waiting on design
• #2405 - FOR UPDATE in querysets
• #3011 - Extendable user auth module
• #3591 - Custom app_label/verbose_name
• #7048 - Support clearing FileFields
Waiting on decision
• #17 - Identity mapper
• #2417 - Binary DB fields
• #4604 - Session-based messages
How to get your pony
What won’t work
• Putting your name in the ticket CC
• Saying “me too” on a ticket or list thread
• Posting hyperbole on your blog
• Changing the ticket to “Milestone 1.X”
• Putting the ticket on the 1.X feature wiki
What will work
• Offer to help out
• Better still - actually help out!
• Build up karma
• Do the unglamorous stuff
• Triage, django-users, patch feedback
Don’t just write code
• Yes, code needs to be written
• It isn’t just a matter of writing a patch
• You need to be an advocate
• Best advocate is someone who is trusted
A matter of trust
• Core team has limited resources
• We need to make best use of that time
• Understand the core DVCS message:
• It’s all about trust
• It’s not about forking - it’s about merging
If you must...
• Do the research
• Demonstrate you understand the problem
• Implementation trumps idle discussion
• Maximise utility for the core team
The Django community is not short of ideas that cou more
The Django community is not short of ideas that could be added to Django's core repository. Some of these ideas are great, and are just waiting for the right implementation or the attention of a core developer. Other ideas are just not going to happen.
However, it's may not always be obvious why an idea has been rejected by the core team. This talk will attempt explain the reasoning behind a couple of specific decisions. More broadly, this talk will aims to provide more general guidance on the decision making process behind the decisions made by the Django core team. less
0 comments
Post a comment