Blog of Rob Galanakis (@robgalanakis)

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...

Read more

1 2