Code quality; patch quality, Malcolm Tredinnick. Python user for 13 years. Linux user for even longer. Malcolm has worked with a wide variety of systems from banking and stock exchange interfaces, to multi-thousand server database-backed websites. These days, Malcolm's primary open source contributions are as a core developer for Django and advocate for Python.
All Open Source projects welcome patches from people willing to help fix bugs or implement feature requests. That's why we launch the source code into the wilds in the first place. If you are wanting to contribute, however, the process can seem a bit daunting, particularly when you are first starting out. Am I doing it properly? What will happen if I do it wrong? How can I do the best thing possible from the start? These are all typical worries. I've had them, others have had them and you're not alone if they cross your mind. In this talk, we will go over a few basic ideas for producing patch submissions that make things as easy as possible both for yourself and the code maintainers. How to help the maintainers help you. Malcolm has been a core maintainer for Django for over give years and has seen a few good and bad contributions in his time. These are the harmless and useful lessons that can be drawn from that experience.
5. Yr Doin' It Wrng!
● If the word “print” is still in your patch
– Similarly for the phrase “import pdb”
6. Yr Doin' It Wrng!
● If you don't have a test or a really good reason
– Your reason is never going to be good enough.
– Fail before; pass afterwards
7. Yr Doin' It Wrng!
● If you think “PEP 8” is the name of a new
energy drink
8. How Hard Can It Be(tm)?
● They're called patches for a reason.
● Go to the top of the project tree.
● Then: svn diff (or git diff or ...)
– “svn add” works locally
● Even if you're a translator or a documenter.
17. Ticket #8182:
Infinite loop iterating over PermWrapper
The template code below will cause an infinite
memory-eating loop if context_processors.auth is
enabled. My main issue with that is that it was
incredibly hard to debug for me, when I passed
my own 'perms' queryset to a template.
...
{% for perm in perms %}
{% endfor %}
22. r7740
Author: mtredinnick
Date: Thu Jun 26 11:01:21 2008 +1000
...
This is the same problem as [7597]
but for values() field
specifications, so this covers the
second case where Django adds extra
stuff to the select-clause.
23. r8107
Author: mtredinnick
Date: Mon Jul 28 04:16:17 2008 +1000
...
Fixed a missed case of promoting table
joins when using disjunctive filters.
24. r8783
Author: mtredinnick
Date: Mon Sep 1 18:43:55 2008 -0700
...
Fixed an oversight when I first fixed
ordering on nullable foreign keys.
25. r8853
Author: mtredinnick
Date: Tue Sep 2 06:52:07 2008 -0700
....
+ def promote_alias_chain(self, chain,...):
+ """
+ Walks along a chain of aliases, promoting the first
+ nullable join and any joins following that. If
+ 'must_promote' is True, all the aliases in
+ the chain are promoted.
+ """
+ for alias in chain:
+ if self.promote_alias(alias, must_promote):
+ must_promote = True
+
31. ● Django runs out-of-the-box on databases.
Plural.
– SQLite, MySQL, PostgreSQL, Oracle
● External backends, too
● Separate solution approach into pieces
– It has a chance of working and here's a good
start.
– It has a perfect implementation.
32. ● Django runs on multiple operating systems
– Windows, Linux, Mac, ...
● Some things are hard
– File handling, locking, ...
– Character encoding
● Best defense is “don't do that”.
● Next best is a good offense (Research!)
33. ● There are RFCs.
– They apply in this universe.
● There are competing specs
– Real world software beats paper
● There are contradictory requirements
– Duh!
34. Python needs research, too
● Pickle has mulitple protocols:
– 0 and 2 are important
● __len__() is eeevviiilll
– With good reason
– Swallows exceptions
● TypeError
● Others (Python 2.3, Python 2.6.0 – 2.6.1)
● Unicode matters. So does UTF-8