Archive for February, 2012
Some tipping tips for non-American GDC/PyCon attendees (and American ones too)
Games Developers Conference and PyCon are both coming up, which means lots of familiar international travelers in the US. A post on G+ asked about how the tipping system works in the US. I’m not going to list the percentages and people (though I will say aim for 20% and always...
Read more
Blog Roll: John D. Cook, The Endeavour
I’ve been following John’s blog for about 9 months and it is one of my favorite blogs. Poignant, digestable posts, that usually get me thinking. The programming posts are the best around, though the math and statistics posts often go over my head (thankfully there aren’t a ton of...
Read more
Don’t forget outsourcers!
In the comments on post “Internal Tools Only Require the Critical Path“, Robert Kist points out a few problems to think about when developing internal tools that may have to be used by outsourcers. I absolutely agree and writing outsource-compliant tools are something many TA’s (including myself) can struggle...
Read more
“Refactor”
Refactoring is defined as a “disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior” by Martin Fowler. But its everyday usage takes a very different meaning. We use the word refactor to everything from the original meaning, to a complete...
Read more
The doubly-mutable antipattern
I have seen this in both python and C#: class Spam: def __init__(self): self.eggs = list() ...more code here... def clear(): self.eggs = list() What do I consider wrong here? The variable ‘eggs’ is what I call ‘doubly mutable’. It is a mutable attribute of a mutable type. I...
Read more
Passing around complex objects is the opposite of encapsulation
I see this a lot: class Foo: spam = None eggs = None def frob(foo): return sprocket(str(foo.eggs)) f = Foo() s = frob(f) It tends to be more sinister, and difficult to see, in verbose examples. But generally it is easily identified by the called method using a single...
Read more
UI’s with too many options
Exposing a UI to twiddle all the individual aspects of an object’s state is rarely a good UI design. Figure out how to abstract your system’s workings to simplify the UI. Graphics settings are a good example of this- there may be hundreds of bits to twiddle for your...
Read more
Too ignorant to know better
My first big python project last year was yet another feed aggregator (taogreggator). Before I started, I looked around at what other aggregators were available, and wasn’t happy with any of them in terms of features, complexity, or trying to get each working. Of course, 9 months later, that...
Read more
Python logging best practices
Logging is one of those things that, being orthogonal to actually getting something done, many developers fail to learn the nuances of. So I want to go over a few things I had to learn the hard way: We are blessed in the python community because we have the wonderful ‘logging’...
Read more
Branching strategy is not a remedy for instability
4 years, 5 branching strategies. First we worked all in one branch. Then we became hyper-branched. Then we consolidated into a couple branches. Switched companies. First we were all in one branch. Now we’re splitting into branches. This has all been in Perforce since it is the de-facto SCM...