Be Careful With Default Values for Method Parameters in Python

Today I Learned: python instantiates default values for method parameters only once — at method definition time. This can cause big problems if your method modifies values in these entities, because these modifications will be propagated to subsequent calls to the same method.

I spent the greater part of day yesterday hunting down some weird behavior in a python app, and I thought I'd share. Here is a simplified version* of what I found...

def test_method(self, http=httplib2.Http()):

   # Remember the original request method
   request_orig = http.request

   # Define a closure that executes the original request method
   def new_request():
      resp, content = request_orig()

   # Replace the request method with our own closure.
   http.request = new_request

We're assigning the new_request closure to the http.request method, and never resetting it. A subsequent method call sees this closure as the original method, and everything breaks down.

The fix is to remove the default http value, and always pass in a throwaway http object.

*Note: the real (more complicated version) is in the authorize() method (line 439) here.

> Read More

Installing Python and Django using MacPorts

Use MacPorts to install python (I'm using Python version 2.7 for this demo):
$ sudo port install python27

If successful, MacPorts should give you this informational message: "To make python 2.7 the default (i.e. the version you get when you run 'python'), please run: sudo port select --set python python27" So let's do that:
$ sudo port select --set python python27

If you want to make sure that installation worked, and you have the correct version, check like this:
$ which python
$ python --version
Python 2.7.8

Using your MySQL server command line, create a MySQL database. I'm using the name 'djangodemo' for this example:
> CREATE DATABASE djangodemo

Install pip:
$ sudo port install py27-pip

If successful, MacPorts should give you this informational message: "To make the Python 2.7 version of pip the one that is run when you execute the commands without a version suffix, e.g. 'pip', run: port select --set pip pip27" Let's do that:
$ sudo port select --set pip pip27

Now we can install Django:
$ sudo pip install Django

Verify that Django is installed:
$ python -c "import django; print(django.get_version())"

Add the Python bin directory to your path. Add this line to your .bash_profile:
export PATH="$PATH:/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin"

If you're using MySQL, install the Python/MySQL connector:
sudo port install py-mysql

Now you can start building your project. The official Django tutorial is a great place to start.

> Read More

Installing node.js on a Mac from scratch

Every other month or so I've had the need to provision a clean Mac with a node.js development environment. I've summarized my steps here for quick reference (mostly for myself, but perhaps other people will find this useful).

1. Install Xcode from the Mac App Store.

2. Activate Xcode license: sudo xcodebuild -license

3. Install command line tools: xcode-select --install. This will bring up a prompt that asks you if you want to install the command line tools. Click "Install" to continue.

4. Download and install MacPorts

5. Use MacPorts to install node.js and node package manager: sudo port install nodejs npm

6. Use npm to install npm install (or npm install -g to install it globally)


What Women in Technology Means to Me: Benjamin Haas, Software Engineer at Control Group

[This post originally appeared on my company blog here. I am re-posting it here for posterity.]

Hi, I'm Benjamin Haas, and I'm a software engineer and manager at Control Group. I am also a developer advocate, which means that in addition to helping build great products and experiences, I try to ensure that developers have a voice in all company-wide initiatives, projects, and processes. Furthermore, I am involved with our developer community outreach initiative, as we recognize that we are part of a larger group of companies and individuals that are actively working toward the technological transformation of New York City.

One aspect of developer advocacy and outreach that is important for me is being an active part of our Women in Technology program. Gender diversity in the workplace is a goal that I am happy to say I am working toward, and I am joined by a pleasingly well-rounded crew of co-workers.

> Read More

ELNYA Event at Talking Transition

My friend Jackie from Only Make Believe recently asked me to speak at the Emerging Leaders of New York Arts (ELNYA) event at the Talking Transition tent in New York. Talking Transition is an initiative to give New Yorkers the chance to take part in a conversation with the incoming DeBlasio mayoral administration. At the ELNYA event, I represented the city's tech needs, as they intersect with needs of the arts and arts administrators community. Here is the gist of what I said.

> Read More

Locally and Remotely Renaming a Branch in Git

Let's say you're busy working on your project, creating feature branches right and left to build out your super sweet app. Then your dev team decides to change their feature branch naming convention. How do you proceed without having an aneurysm? Can you easily accomodate your team's plan and not end up wanting to punch people in the face? Yep! As a matter of fact it's super simple to rename your branches. Here's how.

> Read More

New Orleans Eating & Drinking Guide

When Marci and I went to New Orleans last year, we solicited the advice of our friends (Joshua M. Bernstein! Scott Gold! Molly Dorfman!) regarding where to eat and drink. I compiled their recommendations, along with some spots from, and made this Google map. Since then I've shared this so many times that I figured I should just publish it here. Enjoy, and let me know if anything is out of date.

View New Orleans Food & Drink in a larger map


Update to Installing Yii Users and Rights

It has been a year since I originally wrote the "Installing Yii Users and Rights in 5 Steps" tutorial, and both the Yii framework and the modules themselves have had some updates since then. I made some slight tweaks to the tutorial and updated the git repository to match the current builds.

You can view the updated post containing the tutorial here:


Second Yii NYC Meetup

Our first Yii NYC meetup was a big success (I posted a writeup over on the Control Group blog here), and the second one is just a couple days away. Here are the details:

Date: Tuesday, December 11
Time: 6:30pm - casual conversation, 7:30pm - meeting begins
Location: Control Group offices in the Woolworth Building, 233 Broadway, 21st Floor, NYC | map

Sign up here and come join us!


Meet Raymond Lane Haas

Please help me and Marci welcome Raymond Lane Haas into the world! Raymond was born at Beth Israel Hospital in New York City on October 18, 2012, at 12:24am, weighing 7 lbs. 12.3 oz.


Check out his ever-growing photo gallery here on Flickr!

Syndicate content