Why you should work at Burson-Marsteller on my team

The job app for an opening on my team went up a few days ago (March 2017), here: http://chj.tbe.taleo.net/chj05/ats/careers/requisition.jsp?org=BM&cws=1&rid=1694

It’s in downtown DC, close to a Metro stop. We plan to find a mid-career developer and pay mid-career developer rates.

What’s are we doing?
The job is mostly backend development, Ubuntu-Nginx-Postgres-Django. So UNPD or DUNP or UPDN or something like that. It’s a hybrid of data work, application development, data science and a cloud component. We use AWS with a variety of server and service types. Developers are learning more about how to do server admin in order to deal with AWS and server administrators are learning more about application development, a phenomena called DevOps*. (*because I say so. aficionados think DevOps is a cultural shift in IT departments, too.) We are down to one on-premise server and that’s the way we like it.

Whats the team look like?
We are doing what I call sincere scrum. You may be more familiar with the “yeah-right” software development process, where someone dictates SDLC and the team and management say “yeah right, we’ll do that”. Part of getting team members autonomy is having some clarity around roles. At the moment, we have a clear Product Owner (my supervisor), a Scrum Master (myself), a server administrator and a front end developer.

So what the heck is a scrum master? By the agile textbook, I’m in charge of facilitating the daily status reports, curating the ticket database, but I don’t primarily choose what features we implement. The product owner decides what features are going to make the team money.

Scrum (and especially ‘Extreme Programming’) have some opinions about practices, such as the need for unit testing, build servers, source control etc. I’m also the build master, which means, we have a build server & a build script that automatically compiles, lints, and runs tests. If you haven’t worked on an application with a suite of unit tests, it makes maintenance development far less stressful. New bugs and breaks are found fast and can be fixed fast. Build script driven development also means when it comes time to do testing with live humans or code review with live humans, time is spent on higher level concepts instead of nuisance bugs.

The team is distributed between DC and NYC. We don’t mind if team members work a day a week at home.

What are the cool technologies?
On top of a cake of data work and application development, for frosting we get to work with social media APIs, a huge multinode Redshift database, REDIS, data science libraries like scikit-learn, pandas and so on. Many of our app’s components do huge data pulls that feed datascience reports. The cost of data and the cost of statistical prediction has come way down in the last few years and we are exploiting that to do AI-like or magic-like predictions and analysis.

So throw your resume into the pile and our HR department will get to me:

NB: I don’t speak for Burson-Marsteller. I just happen to work there and we have a job opening on our team.

Things that went wrong trying to run pydoc

This is from the standpoint of a beginning python developer on windows. I assume you are like all other python developers and just stare at the machine to twiddle the electrons. These are my in progress notes on getting pydoc to run.

Install python. Install it over and over because it is just like Java, and .NET, dozens of side by side installs.
Install pip. It may or may not already be there.
Install pywin. I have no idea if it helps. My generators only generated for 3.3.
Install virtual environment so you don’t junk up the global interpreter with packages.

You will want to get c:\python33\c:\python33\scripts in the path. Set the path the old fashioned way. If using powershell, reload the environment over and over. (pywin is supposed to help for this)

$env:Path = [System.Environment]::GetEnvironmentVariable(“Path”,”Machine”)

ref: https://stackoverflow.com/questions/17794507/reload-the-path-in-powershell

Okay, check it like this

$env:Path.Split(“;”) | Where {$_.Contains(“yth”)}

The goal is to get all the sphinx cruft into a \doc\ folder. The whole mess will fight this every step of the way.

cd over to your source code folder (maybe) and run this. (I’m not sure about the best folder, initially I tried running from the c:\python33\source folder, which junks up the python directory. Which seems wrong.)


If it doesn’t run, your path is screwed up. This command creates a conf.py
When answering, most of the time you answer the default, except for the API doc stuff, which appears to be “n” by default. It appears that people use pydoc not just for python api documentation, but for autobiographies and they cater to that scenario first.

You’ll need to edit that conf.py

Install nano. You could instead open it with word, or some other inappropriate application. At least nano doesn’t kick you out of the console and it isn’t vim.

If the conf file lives in the same directory as your source code, uncomment this:

sys.path.insert(0, os.path.abspath(‘.’))

Or if the conf.py file is in a sub directory of your app’s directory, use two dots

sys.path.insert(0, os.path.abspath(‘..’))

Pause. Go edit your python files and add this to anything that will execute code (and not just define functions and classes) so you don’t get side effects when generating documentation. And add some comments of the for “”"blah”"” to your functions. I think this is the expected syntax for the doc comments.

if __name__ == ‘__main__’:

Create the rst files.

sphinx-apidoc -o api .

(maybe – . . would work better?)
I got modules.rst and foldername.rst. The modules.rst just has a reference to foldername.rst.

These .rst files are like editable “markdown” like things. They need further processing. Firstly, on my machine, when I run it, it adds the folder name as the package, and then I get a FolderName.filename package doesn’t exist error for each file on the make. So edit the .rst file and fix the package names.

Copy those .rst files into the root of your source control or where ever where ever conf.py is. I think. Put it in all the directories on the workstation if that doesn’t work. This is like working with java, nothing knows where anything is.

Run these, although I have no idea what they do:

sphinx-build -b html . build

.\make html

And it spits out some html. Cd to the build/html folder and run this to launch chrome.

Start-Process “chrome.exe” “index.html”

I have no idea if this works, my source folder and python folders are littered with crap created all over the place.

Official docs:
http://sphinx-doc.org/tutorial.html Quick start tutorial. If this works for you, then you are the sort of person that didn’t need docs in the first place. Sort of ironic.
https://codeandchaos.wordpress.com/2012/07/30/sphinx-autodoc-tutorial-for-dummies/ This is the more useful one, but not in itself enough to generate.
http://sphinx-doc.org/man/sphinx-apidoc.html You need this if you are using it for, I don’t know, python API documentation and not your autobiography.

TODO: Turn this into a .bat and .ps1 file.

Follow up Links
PyCharm has a built in understanding of Sphinx.
ref: Overview
ref: Python Integrated Tools Dialog.