New gig at Bulogics

Most of my friends know I left MakerBot back in December/January. They were going in a direction that didn’t fit my style/interests and the commute back and forth to NYC was becoming a real headache, especially with a little human in my life. Someday when dust has settled I’ll talk about it. But for now there is too much chance my opinion would misunderstood or ‘creatively’ misinterpreted by folks that have been with MakerBot. No hard feeling on my end, but the situation just wasn’t working out.

After leaving I took some time off, then spent some time taking took a look around the Philadelphia scene for any interesting opportunities. After talking to several shops I finally found a great fit for my interests and skill.

As of last week I’ve joined on with BuLogics as Chief Innovator. I’ll be once again herding nerds and working to keep the engineering and design team in close coordination with the business folks. Two things I enjoy, and am pretty damn good at.

Part of what set BuLogics offer apart was a chance to have a big influence in their next stage of growth. They are looking to expand and focus their skills a bit more cleanly. It’s hard to pass up such a great opportunity there to help take an organization to the next stage of growth.

Another great side effect of the new position is that I have a lot more flexibility to blog. So you all can look forward to more posts about teams, teamwork, and creating a culture of making both here and over at BuLogics blog.

P.S. also, check out the terrible bio photo :( It’s the only one I had available when they posted that I’ll have to change that soon.

Tags: , , ,

Stag hunt with Reluctant Free Loader on the side

I’ve been thinking a lot about the problems Phildelphia’s schools are having, and how various actors in the situation are playing out their role.

Background (Skippable)

The long story made short is Philly is closing a lot of schools. From my simplistic research so far I’m concluding that some school closings do make sense, but that the rash of closings is a last second swerve to avoid budget failure that has been threatening the district for years. Furthermore, the district has been giving out school charters for private schools in some dubious and questionable situations. Some dubious behavior of charters (not *all charters*) and willy nilly granting more charters has undermined the enrollment levels, making it seem smart to close more schools. Again, that is my simplistic research, I’m sure other folks have a better point of view.

As a new dad, I’ve been looking at school districts and pondering when it gets to the point that I abandon the system, and pay higher rates to put a child into a privates school. To me that decision reeks of game-theory, so I’m putting down my thoughts on it to clarify a bit.

To the Game Theory:

From a theory point of view, this could be modeled as a variant of the Stag Hunt game. Lets imagine a game of ‘Stag Hunt’ with thousands of players. Now lets add to those players a distribution of resources that roughly matches the Philadelphia general income, and/or tax base. Finally, we need to add a reasonably high threshold to not joining the game (ie, the cost of private education for a child). Which is odd, since it sets cooperation at a lower and default threshold, and individual action at a higher threshold. I think that becomes a decent model of parents drawing their students out of the district to private schools, lowering the income available.

Then the question becomes, what is the defection rate/system that drives more people to defect? Is there a good way to map/cap general defection from the game? At what point have we undermined the commons so far that every participant is worse off?

General Musing

What amazes me the parents fallacy only their own children’s education is in their interest. As an american you interact and depend on hundreds to thousands of other people for all of your infrastructure. The kindergardener in a crappy school today is going to be a Nurse caring for us in 30-40 years. The kids you are yanking head-start funds from are going to be mechanics, plumbers, and taxi-drivers in 20-30 years. Do you really want to be running around a city or country with these people on the loose? Do you really want to undermined your future quality of life, by setting up an environment of poorly educated people around you to care for you in old age? As much as my own child’s education matters to me, having educated caretakers in old age, and educated co-voters at all ages is hella-important.

It also makes me think I need to find, or invent, a bunch of new terms for real-world game theory.

Reluctant Freeloader: These are people who can’t contribute to the game a fair amount. Think ‘unemployed single dad.’ They are working and contributing what they can, but they don’t have the means to cover their cost.

Woefully Advantaged: This is someone with enough resources they think they can defect from the game without consequences, but really are suffering for it.

N-th turn: Borrowed from computer science. This is a reference to some point in the future (the n-th turn) when the game fails or people lose based on their earlier strategy.

School District Problem: This is a variant of the Stag Hunt problem, as described above.

Fixing xclip

Xclip could be a great commandline tool for pulling things into your clipboard. I say ‘could be’ because remember the options needed to use it is as bad as using tar. I was digging around for a solution, and found a great bash script at madebynathan that solves the problem.

The madebynathan site suggests adding the script to your ~/.bashrc file. I like to keep my bashrc a bit cleaner, so instead I saved the script as ~/.cp.bashrc so that I can easily remember what chunk of code causes ‘cp’ to work.


  • Pipe anything to the clipboard
$ tail -n 100 /var/log/apache2/error.log | cb
# => Copied to clipboard: [Sun Oct 02 08:02:08 2011] [notice] Apache/2.2.17 (Ubuntu) configured -- resumin...
  • Copy the contents of a file to the clipboard
$ cbf ~/.ssh/
# => Copied to clipboard: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnwaNIuOhZzUeR6/xEEudXt3zEh91dawhkkKx8p/+4Bw9...
  • Type straight into the clipboard
$ cb This is some unquoted text.
# => Copied to clipboard: This is some unquoted text.

No options, no man pages.

Installing it

If you think this looks handy, add the line

source ~/.cp.bashrc

to your ~/.basrc file. Then save the below code section to ~/.cp.bashrc, and rock the easy xclip magic

# A shortcut function that simplifies usage of xclip.
# - Accepts input from either stdin (pipe), or params.
# ------------------------------------------------
cb() {
  local _scs_col="\e[0;32m"; local _wrn_col='\e[1;31m'; local _trn_col='\e[0;33m'
  # Check that xclip is installed.
  if ! type xclip > /dev/null 2>&1; then
    echo -e "$_wrn_col""You must have the 'xclip' program installed.\e[0m"
  # Check user is not root (root doesn't have access to user xorg server)
  elif [[ "$USER" == "root" ]]; then
    echo -e "$_wrn_col""Must be regular user (not root) to copy a file to the clipboard.\e[0m"
    # If no tty, data should be available on stdin
    if ! [[ "$( tty )" == /dev/* ]]; then
      input="$(< /dev/stdin)"
    # Else, fetch input from params
    if [ -z "$input" ]; then  # If no input, print usage message.
      echo "Copies a string to the clipboard."
      echo "Usage: cb <string>"
      echo "       echo <string> | cb"
      # Copy input to clipboard
      echo -n "$input" | xclip -selection c
      # Truncate text for status
      if [ ${#input} -gt 80 ]; then input="$(echo $input | cut -c1-80)$_trn_col...\e[0m"; fi
      # Print status.
      echo -e "$_scs_col""Copied to clipboard:\e[0m $input"
# Aliases / functions leveraging the cb() function
# ------------------------------------------------
# Copy contents of a file
function cbf() { cat "$1" | cb; }  
# Copy SSH public key
alias cbssh="cbf ~/.ssh/"  
# Copy current working directory
alias cbwd="pwd | cb"  
# Copy most recent command in bash history
alias cbhs="cat $HISTFILE | tail -n 1 | cb"  

Top Secret Rosies at Comcast Center

TL;DR: version: If you are free after work on March 20th, get a ticket to watch Top Secret Rosies for free at the Comcast Center.

A while back my esteemed partner (with a bit of help from me) helped arrange some events to draw attention to Top Secret Rosies, a documentaty about the first female programmers of ENAIC These first programmers are nearly forgotten by history.

Read the rest of this entry »

Tags: , ,

Mutable, Changable you

Most people, especally those over about 50, know The Peter Principle: “Employees tend to rise to their level of incompetence.” Recently a post Why People Shouldn’t Love You For Who You Are caught my eye. It was a reminder why hate discussions that assume human behavior is static, and don’t learn and change.

People change constantly. If anything, it’s our adaptablity that makes us such an amazing species. As a developer (and a bit of an engineer) the idea of feedback loops and self-balancing systems makes me happy, since they seem intrinsicly beautiful, and self-managing. Not only are humans dynamic, but the universe itself isn’t static. As old as trees, or rocks, or our planet seems, it’s only because we are so small and live so short a life.

One of my most painful experience with this was during my first job out of college. I breezed through college with a A- average, really not applying myself to much schoolwork outside of one or two classes I dug. I knew how to do enough to get an A-/B+ with little work, and I worked that system. I graduated thinking I was pretty damn good, especially if I could do that well with little work. So it was a rude shock when during my first review the head of the software group told me I was not so good, and pointed out 3-4 major problems with the code I had written that month. It was a major blow to my ego, largly because it was true.

After that I got to thinking about feedback, and using it intellegently. I’ve developed the habit to usually assume that everyone ( even the jackasses) are Agent-Correct. Given their knowledge and experience, I am going to trust they are giving an honest ‘trying to fix things’ opinion. Even if that opinion is given in a brash way. I also try to realize when I, or they, ‘Agent-Wrong’ vs. ‘Global-Wrong’. Given their view/information/experience am I wrong to them? Maybe I’m even wrong overall?

It’s amazing what a downer being wrong can be. I am still amazed when someone who cares about me corrects me, and I get defensive. Why do I have such a negative reaction even when I know they are trying to help me? Why do I get defensive and regretful even when intellectually realize they have a good point? It’s weird, and it’s sometime hard to keep those feelings in check. Sometimes wanting to be right can stand in the way of taking feedback, being correct, and becoming actually right.

Excellent Hacks: Pathfinding

Finding the right feature to cut during an 11th hour rush to shipping in a trick, and a meta-problem that can be result in amazingly rewarding (and time saving) hacks. Code of Honor has a great post on a pathfinding hack to get StarCraft out on time.

TL;DR: They removed collision between harvester units to avoid pathfinding failures. A great hack that causes no gameplay problem, and makes the whole system simpler to manage.

Tags: ,

mea maxima culpa

It is sometimes hard to keep to a charter or agreement one has made without public acknowledgement and feedback.  People are social animals, and we are well built to follow social contracts, but sometime private agreements are forgotten.

So it’s with a sadface :( that I write this post to publicly admit I failed to stand by the ‘Not to Speak or chair all male panels’ pledge I signed on for.  To be fair, the panel was chaired by a woman (the fantastic Phoenix Wang) and it wasn’t a public event.   But nonetheless,  I took a pledge and dropped the ball. Mea Maxima Culpa.  It was a pledge I signed without talking much about, and I completely forgot I agreed to the pledge until the day after the panel. Interestingly enough, I just took a look back at the pledge page, and I can’t read the pledger to see who else may be slipping up, or defecting. Nor did I see any suggestions on how to make up for a slip-up for pledges that forgot their pledge, or who get stuck in a rock/hard-place and must take a panel without a woman member for some extra-ordinary reason.

If anyone has any good suggestions for a proper Mea Culpa for people that don’t live up the the pledge, drop ‘em in the comments. I’ll be picking one of them, or inventing my own, to make up for failing at that pledge.


Hofstede’s cultural dimensions and Developers

Back in the 1960’s and ’70’s a researcher for IBM named Greet Hofstede did some amazing research about culture, and found 7 cultural dimensions that map onto all human cultures, and knowing those dimensions tell a lot about how the culture behaves. Those dimensions are:

  • power distance (PDI)
  • individualism (IDV)
  • uncertainty avoidance (UAI)
  • masculinity (MAS)
  • long term orientation (LTO)

I’ve also gotten into a habit of thinking about how colleges fit into that scale, so I can better understand what they want or expect from a working (or personal) relationship. It’s an interesting and useful lens to use when figuring out how to work with people in an organization that you don’t automatically click with.

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: , ,