So Long, and thanks for all the fish!

This week was my last week with MakerBot.

Two-ish year ago phooky asked me to interview as a lead desktop developer.  I wasn’t really looking for a job, but since I respected him and his incredible hacks, I agreed.  At the time it was a small pre-funding startup. To work with a hacker I respected so much, and on 100% Open Source technology was enough of a draw me from Philadelphia to work in Brooklyn.  Since then I’ve been shuttling back and forth from Philly to Brooklyn most of the week so I could herd the nerds for MakerBot.   It’s been an amazing opportunity, but a recent addition to my family means I need to be in Philly full time.

MakerBot gave me the challenge and honour of building a great department to create a stellar product. I also had the rare joy of a blank slate on which to redesign and implement our new desktop software stack, hand in hand with a group of  brilliant developers.   We created a new slicer, a new tool-chain system, a new device driver, and even a beautiful and simple UI on a tight schedule, with some great partners. Despite the controversy about closing some source access to MakerWare,  it’s a product I am very proud of.  It’s fast, robust.  It ran cleanly on 3 platforms from first day it shipped Without a doubt it is the most impactful product I’ve shipped. The most on-schedule product I’ve shipped too!

It’s quite bitter-sweet to be leaving MarkerBot, and a department I shaped, but c ‘est la vie.  Goodbye Brooklyn, and MakerBot!  It’s been an honour, a challenge, and a joy working with you.   I’ll miss the great humour, the inspired hacks, and the great brainstorming.   Even though you won’t really need it, I wish you all the best of luck.  With the pool of talent still there, I’m sure the company will grow and succeed regardless.  I’ll always look back fondly on the great time and great people I worked with at MakerBot,  and Ilook forward to seeing great products and projects you ship in the years to come.

… but at the same time, Hello Philadelpha!  It’s good to be back full time.  Lets get into some trouble.

Tags: , ,

Fast Data Structures in Python

A blatant repost, mostly so I can easily find this excellent overview of fast python data structures later.

Tags: , ,

What we believe about software development

I came across an excellent (and old) online talk by Greg Wilson on the net today, covering what we believe about software development. It’s a good talk about how little science we use in deciding and reviewing how we plan software, and highlights how many bad or guesstimate numbers computer scientists and engineers throw around when talking about their profession. Watch the video.

The best developers are 28x more effective than the worst

Along with the bad statistics of it, it’s not backed by good data. The studies were long ago with small sample sets, they really don’t apply to modern conditions. Common sense? Not especially. Also, there is the statistical problem of *ever* comparing the best to the worst. It’s a useless measure since ‘worst’ could be someone taught to code an hour ago. Comparing against mean/median/mode is probably a lot smarter.

SCRUM and Sprints keep software from being late

Another good point. As far as I’m concerned, working in a sprint system is what got MakerWare out the door on such a great tight schedule. Iterative design and culling features, as well as allowing for error and error correction during the process. But the plural of anecdotes isn’t data, the plural of anecdotes is rumors. Is there really smarter planning going on? Smarter throwing away features? What is the actual process that makes SCRUM seem or be, better than planning up front?

Until I watched the video, I had not recognized how many software process decisions we as a culture made by anecdote based suggestions, or convinced over beer discussions. If you have time, watch the talk, or add his blog to your RSS reader.

Tags: , , ,

Martin Luther King, Jr Day 2013

On April 4, 1968 a man was assinated to stop the change he was making in the world. A Nobel prize winner, priest, and father of four, cities across the country boiled over into riots when he was killed. Here in January 2013, I see so much of his vision unfinished, I wonder what the world would be if he had not been murdered. I chose the name of this site ‘Creativly Maladjusted’ from MLK’s Transformed Nonconformist. Although I may not be a civil rights leader or a great writer, I try to creativly reshape our world into a better place in my day to day life.

Below is a section from “Transformed Nonconformist” Strength to Love:

This hour in history needs a dedicated circle of transformed non-comformists. Our planet tetters on the bring of atomic anihihation; dangerous pasions of pride, hatred, and selfisheness are enthroned in our lives Truth lies prostrate on hte rugged hissl of nameless calvaries; and men do reverence before the false god of nationalism and materialism. The saving of our world from pending doom will come, not through the complacent adjustment of the conforming majority, but through the creative maladjustment of a nonconforming minority

Human salvation lies in the hands of the creatively maladjusted. We need today maladjusted men like Shadrach, Mesach, and Abedgnego, who, when ordered by King Nebuchadnezzar to bow before a golden image, said in unequivocal terms, “If it be so, our God whom we serve is able to deliver us. But if not…we will not serve thy gods”; like Thomas Jefferson, who in an age adjusted to slavery wrote, “We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty, and the pursuit of Happiness”; like Abraham Lincoln, who had the wisdom to discern that this nation could not survive half slave and half free….Through such maladjustment an already decadent generation may be called to those things which make for peace.”

– Martin Luther King, Jr. “Transformed Nonconformist” Strength to Love. Philadelphia: Fortress Press, 1963/1981: 27-28

Kings words as as true today as they were in the 1960′s. While we have moved forward in many ways, we have far to go. His vision of a better world, and impeccable advice on how to get there is just as relevant today as it was 40 years ago.

Tags: , ,

Testing Python Packages less painfully

If you want to test a python package before you share it with the universe, you can (in theory) use the Python Package Index Test (testpypi) server. In practice, using testpypi is painful, and the hints on the pypi front page don’t give enough details about how to do it. This post is my log of how I get testpypi working for me. This post will walk you through getting your new module up on testpypi and making sure it works right before you post it to the world+cat on Python Package Index (pypi).

setup.py

This post is assuming you already have an awesome setup.py file, and already know how to build a basic package using distribute, or setup_tools. . That work is already covered by some tutorials. Read those guide first if you need an setup.py intro, and come back here when you are done.

Please use distribute

Welcome back. Ok, I lied. I would like to suggest one change to your setup.py file. My request is to ask you to kindly please use distribute_setup. its the new hotsauce,

from distribute_setup import use_setuptools
use_setuptools()

That will use the newer distrbute tool to setup your project.

Register a username on pypi and testpyp

Register for a username and package name at testpypi. I suggest you also grab a matching user name at the main pypi site as well. You will need one of these to log in and update projects you want to post.

Manually create your config file

In theory running python setup.py register will create a proper config file for setup. This failed for me many times, especially when trying to use some -r options to post to testpypi. Instead it’s eaiser to manually create a .pypirc configurat file. On Mac/Linux, it lives at ~/.pypirc If you know where it lives on Windows, please leave a comment. To use testpypi you mostly need to define it as an index server. For speed you can just use the config below, which defines the main pypi server as well as the test server. Edit it to use your own username instead of ‘yourlogin‘.

[distutils]
index-servers =
pypi
pypitest

[pypi]
username:yourlogin

[pypitest]
repository: http://testpypi.python.org/pypi
username:yourlogin

You can also add to each index server a line containing password:yourpassword. That is, if you believe passwords in plaintext files are a good thing!

Register your module name

Almost there. You can now run setup.py commands with the remote option specifying a index server named in your config file. For example adding -r pypitest. Note that you have to put the -r option after each command which contacts a server in the params chain. It’s annoying, but that is what it takes. You can now just register your project with pypitest by running.

python setup.py sdist # create your distribution
python setup.py sdist -r pypitest #register your package name

Upload your module

Now, you can (finally) upload your module to the testpypi server. In the example the command line to do that would be:
python setup.py upload -r pypitest
Of course, once you have done it step-by-step to sort our errors, you can do an all at once command of
python setup.py register -r pypitest sdist upload -r pypitest

Test downloading your module

Module uploaded successfully? No errors, failures, insanities and it shows up on? Can you see it in the list of available testpypi packages? Gratz! But you can’t go home yet. You need to test installing the module from the index server.

The best way to test is to fire up a virtualenv to download your test module into. This will isolate it from messing up your system if something is broken. If you need to learn to use virtualenv, read this virtualenv tutorial and then come back. Once your virtualenv is running. just run pip with the ‘-i testpypi’ options to grab your test package from the testpypi. The command for that (in this example for pypeople) looks like:

pip install --verbose --index-url http://testpypi.python.org/pypi/ pypeople

If you are testing several times in a row, you will need to add –upgrade to trigger a force re-install. Otherwise install will only re-install for a major version number change.
pip install --verbose --upgrade --index-url http://testpypi.python.org/pypi/ pypeople

Success!

Finally, bugs are squashed, and your virtualenv install work. Gratz! You have tested posting your project as a module, and you have tested downloading your module. Now it’s time to push it over to pypi, and post it for the world to see/share.

If you want to read more, check out this Great post at foobar.lu.

Tags: , , ,

cltool: Example command line too in python

I have been hacking at a quick command line tool for python for managing my address book. Being a bit of a over-sharer I’ve been planning to distribute it by Python Package Index (PyPI) to share, in case other folks find it handy. Along the way I’ve run into several problems distributing it, ‘natch.

Rather than dirty up my address book workspace with testing, I created (and distributed) cltool, an example python command line tool. The cltool project is a simple demo of how distribute and setup tools work to create an installer. Here’s a quick overview of it.

setup.py

All of the good sauce of the project is in the setup.py script. Python’s distribute tools are pretty powerful, except the lack of an good uninstall. My first attempt was using just the scripts entry to list what scripts get installed. However after some extra digging, I discovered that you can create an entry point called console_scripts to point directly to python functions to execute.

TESTING.md and READING.md

These two files contain a detailed overview of what the project does, and gets into some of the key points of how setup works. TESTING.md also includes recommendations for local testing of your new package.

If you ever want to deliver a command line tool for easy_install or pip, cltool is a good template to start from

See Also:

Tags: , , , , , ,

keep IO near the main loop, and other Haskell tips

Here is a great post on some of the good code habits that Haskell language engenders in a developer. The part about marking IO through the stack to the main() statement is a interesting trick, and I can see how that helps keep the map of interaction clear in a programmers head. I’ve learned my own way to see every such problem as a chain of the primitive list operations, maps, folds, filters and scans. due to a personal quest to often convert my python code to functional python.

The author complains a bit about C++ tempting people with nearly-functional behavior, and I wonder if he has ever used, and what what he thinks of the STL::Algorithm library. Either that is a key to solving all kinds of problems, or just another bolted-on 1/2 solution. I’ve not had an excuse to use it myself, so if you know about it, post your review in the comments!

Tags: , ,

Twelve Leverage Points on a system

I was reading up on some software management design, and through the random links of the internet I came across the wikipedia article on Twelve Points of Leverage. Having worked with a lot of system, I’ve always been curious about system, and what drives them.

I was blown away by the fact that someone had the insight (and gall) to totally generalize large system input and control, and pretty succeeded at it. There is a single developer* article on the topic, but I’m quite astounded it doesn’t show up in engineering or Comp Sci more often.

Team Leaders as Plate-Spinners

I’ve been trying to find a good description of a good leader/manager of a mostly peer to peer team, and the best I keep coming up with is ‘plate spinner’ Yeah, like you see busking on the boardwalk down the shore.

Most of the best leaders I know are not embedded in the projects they lead. They know the details, and they can dig into a problem or a situation, but they are a bit away from it, watching all of the moving parts together. The best leaders I know (and I’m still learning this trick) can engage management or customers as the audience, even as they keep adding little bits of momentum to the projects, tasks, or people that need it.

I think ‘plate spinners’ works as well, because the best skill I see isn’t working on the project, or being in the situation. The best use of their time is to ask great questions, or make small (but key) suggestions, not throwing boatloads of work into a sub-project or problem.

So, for now, I’m using that analogy in a lot of discussions. If anyone out there has a better term or better analogy, I’m all ears.

Relicense an open source project?

There are a couple of great posts about Re-licenseing VLC (pt1) as an LGPL project (pt2). One of my friends was on the fringes of similar work with Angbnad a while back, and the loops they jump through are amazing (and crazy).

In other news, during an upgrade my site was switched to ‘Don’t let search engines crawl this site’ So hopefully I will be reindexex soon, and searchable.

Tags: ,