Stuntman And Lover Of Cheese

by Dan Weeks

Workplace Disdain

I had been working on a post about how I feel about my work/life balance, the way work is going, and some of the things I want to improve in my life. Some of this I haven’t decided if I even want to publish yet. I have extracted here one part of it that happens to coincide with a recently published opinion piece by Susan Cain in the New York Times: The Rise of the New Groupthink.

In the article Ms. Cain starts:

SOLITUDE is out of fashion. Our companies, our schools and our culture are in thrall to an idea I call the New Groupthink, which holds that creativity and achievement come from an oddly gregarious place. Most of us now work in teams, in offices without walls, for managers who prize people skills above all. Lone geniuses are out. Collaboration is in.

I’ve worked in a lot of different types of offices. By far the one I have the most distain for is the open floor plan. Unsurprisingly this is the kind of office at my current day job.

Orders of Sorts

Back in those before times when I worked in animation and visual effects I did a lot of work around render queues and handling frames. Frames to be rendered, composited, passed to other departments, etc. At every studio there was a shorthand for specifying frames, frame.1-100.ext for example.

In dealing with them and generating new frames you didn’t always want to go through the list sequentially. For example if you’re generating an effects shot and you want to see it along the way you could render on tens (10, 20, 30, 40 and so on) but that wouldn’t always get you what you wanted fast enough, especially if your sequence of frames is 1000 frames or more. This allows the user to get a feel for the generated sequence before it is completed and make the call if changes are needed or it can continue.

To combat this and help users get to see their renders faster I came up with a few ways of reordering arrays (generally frame ranges, but they could be tasks too) that proved useful. Stochastic sampling would work, but could be heavy on one end of the sequence unintentionally. There’s also the issue of repeatability, since being able to repeat the same execution multiple times makes it easier to compare two runs of tasks.

Recently I wanted to run some discrete tasks that each took a non-significant amount of time. Rather than just randomizing my list of tasks I wanted to see progress across the whole sequence, just like when I was working on a shot in animation. To that end I ported my array ordering functions to an NSArray category: NSArray+FESOrderOps1.

So there it is, enjoy.


  1. There is also an implementation of a Fisher-Yates shuffle in there that could be handy because a shuffle is an order and this way I feel it’s complete for my needs.  ↩

Marching On

Well, here we are, after a two-and-a-half month leave of absence I went back to work at ngmoco. It was fun, refreshing, and enlightening to have that much time off.

Seeing

I did a little bit of traveling. First was about a week in Hawaii. That was the first vacation I’ve taken in my adult life where I didn’t have to worry about going back to work on my return. For the first time in my life I just cut loose and relaxed fully. We did some snorkeling1, chilled on a remote beach, did a little hiking, and saw some awesome volcanic features. The earth giving birth to itself is just awe inspiring.

In the before-times I worked for the House of Mouse. A perk of working there was free tickets to the theme parks. I had a couple of such tickets still sitting around and decided to use them before they expired. That wasn’t the fun part though. Adding an extra day to our trip and going up the California Coast to see Hearst Castle was a great decision. It’s a fascinating building and grounds combined with a rich history and art pieces. The park is fairly out of the way for most SF and LA travelers, but it’s only a day’s drive from either and if you can add the day or two to see it I recommend it.2

Noodle

Part of this break was to blow the cobwebs out of my head. Well, maybe not cobwebs, but I needed to realign my brain a bit. I think I was pretty successful in that. I got to work on a few of my own personal projects and I not only brushed up on some technologies I hadn’t used in a while but I also learned some new iOS 5 technologies. Part of this was a the pure freedom of just working on what I wanted to. No sprints. No scrums. User stories, yes, but no forced march to appease management or satisfy deadlines you had no hand in creating.3

Doing these projects, even if they never come to fruition, was excellent mental exercise. I’ll keep on them now that I’m back at work and if anything it will help keep me mentally agile. I’m excited for all of them and hopefully I’ll be able to put more time into them soon.

Relax

By far the biggest part of this break was relaxing. Watched movies; read books; played Portal 2, Left 4 Dead 2, and Dead Island; and above all hung out with my lovely wife.

I didn’t know I’d enjoy it this much. I mean, I should have guessed. I love my wife to pieces and what would be better than spending a metric butt-load of time with her? Short answer: nothing. It was great in a way I never would have imagined. Now that I’m back to work I’m having a little separation anxiety. I know I have a great time with the person I chose to spend my life with. Now I need to work on a way to be able to spend more time with her in the future.

One other thing that was great to do was revisit the art of the siesta. Naps are damn important. I’m going to extend this back at work because I damn well work better after a short nap. And I now know I work better in the mornings and after naps.

Return

At the end of my break I was pretty jazzed to be returning to work. I have a great team to be on at ngmoco and we were working on some cool things when I left. Needless to say, a lot changed in my two and half month absence. We’ll have to see how things shake out, but for now, it’s great to be back with my team.

Reflect

In my time off I was able to reflect on a lot of things. The biggest one I keep coming back to is that my country’s corporate and health care systems are screwed up.4 After working on my own projects for a bit I found that I liked it nearly an order of magnitude more than working for someone else.5 Then it struck me that if we did have single-payer universal health care I likely would be working for myself. Health insurance is the primary reason I’ve returned to work. As Spike Dolomite Ward wrote recently:

If you still have a good job with insurance, that doesn’t mean that you’re better than me, more deserving than me or smarter than me. It just means that you are luckier. And access to healthcare shouldn’t depend on luck.

Ms. Ward has been attacked for her op-ed piece too. Our system sucks and that there is any fight about this is ridiculous. I feel lucky to have insurance but I want it to be better. That, however, is a post for another time.

Onward

To recap:

  • Got to travel.
  • Got to relax.
  • Got to play some great games.
  • Worked on personal projects.
  • Got reacquainted with naps for good.

It’s a good list for only two and a half months. Until next time just know I’ll be marching onward. See you down the road.


  1. I can’t recommend Snorkel Bob’s more. Friendly and knowledgeable staff in Kona for sure.  ↩

  2. We drove up from LA, leaving fairly early on a weekday but still hitting major morning traffic, and got two of the tours in before the end of the day. We then stayed overnight in San Simeon and drove back to the Bay Area the next morning.  ↩

  3. It is no doubt that schedules are important, but when they’re forced on you and you’re not a partner in creating them there’s failure and disappointment in the future.  ↩

  4. Yeah, big surprise, right?  ↩

  5. I know, I know. Duh!  ↩

Movember

I’m not sure why but I never posted my Movember participation here. So, to correct that, I’m participating in Movember. I’m growing a mustache for the month of November to raise awareness for men’s health and prostate cancer research. You can donate at the my Movember Page. As a treat, here was the Ides of Movember on my face:

Ides of Movember, November 15, 2011

Shit Work

Zach Holman posts on his site Don’t Give Your Users Shit Work. It’s a great look at sorting and tagging and grouping that users are expected to do sometimes. I’ve often found tagging, making lists, sorting and such to be a bore. Zach puts it quite succinctly when talking about instant messaging: ‘Then I merged everyone into one big group called “Humans”.’ I did the same thing a while back and I’ve never cared about splitting things up since. I mostly have better things to do.

Looking for Changes to Apple Program Agreements

If you’re an iOS or Mac developer that ships software via the Apple App Stores then you likely know the hassle of seeing what has changed when Apple puts a new program agreement in front of you. If you don’t accept it you will be cut off from the dev portal. If you don’t review it you’re just being silly and can harm your business.

There are some apps for comparing PDFs, but they tend to be a bit pricey for my tastes as I don’t need to do this as a full-time task. I suffice with converting the PDF files to text and then using a diff tool to compare them.

Here are the steps you’ll need to follow to get your program agreement PDFs into text format to compare them:

  • Install Homebrew (if you already use MacPorts or Fink then go with that)
  • Install the poppler package to the the pdftotext utility
  • Grab your downloaded copy of the program agreement (or, if you didn’t save it can goto the Legal Agreements section of the Member Center).
  • Review but don’t accept the new program agreement and download the PDF version of the agreement
  • run the command pdftotext -layout -nopgbrk -enc Latin1 $agreement.pdf $agreement.txt
    • you will need to replace $agreement with the name of the PDF file
    • you will have to run this twice, once for the prior agreement and once for the new agreement
  • use your favorite diff utility to view the differences:
    • I like both Kaleidoscope and Changes as both come with command line utilities
    • OS X Developer tools come with FileMerge which can be accessed with the opendiff command line tool

There you go, you can easily review your Program Agreement changes before accepting without worrying because you didn’t read the new agreement.

Heartbeat

For the last (nearly) sixteen years I’ve been working constantly. There have been some minor breaks between jobs, but mostly they were to travel from one coast to another. I took some vacations, but not nearly enough. Not by a long shot.

My career has been exciting, taking me from once small companies that I helped build into successful entities to large companies that I couldn’t be more proud to have my name associated with what they do. Through it all I’ve been fortunate enough to work with very talented people and to continue to learn, no matter where I was or what I was doing. If you had asked me fifteen years ago where I would be and who I would have worked with I wouldn’t have been able to imagine all of this. It’s humbling and mind boggling all at the same time.

Today I am taking a leave of absence from ngmoco. It’s been a great year and a half, but I feel like I’m at the point in my life where I need to take a personal break for a bit. I’ve been working hard for nearly sixteen years and I didn’t come to this decision lightly. I’m grateful that the company is willing to let me clear my head and stop the burn-out process, otherwise I feel like I risk losing what I love to do.

Almost three years ago I lost my dad when he died very suddenly in the days following Hurricane Ike ravaging Houston. He was only weeks away from turning 58 and from celebrating his 35th wedding anniversary. Fifty eight. That’s far too young for a person to be gone. Every week I wish he was still around for me to ask him a question or to share some cool thing with him. I often wonder if he had any regrets as he lay dying.

I don’t want any regrets.

I don’t want to wake up in the future and realize I didn’t take a chance on myself.

Right now that leads me to a career break. I’m going to take a couple of months off from anything but me and my wife and our life together. I want to lay in the grass with the sun on my face. Maybe I’ll see some exhibits or visit a museum or two. I have a few ideas knocking around in my head and I’ll probably work on those, read a bunch, and reacquaint myself with the art of the siesta. These are all high on my list to clear out the mental cobwebs. I think I might even get around to playing Portal 2, finally.

This is all about reconnecting with myself, clearing my head, and seeing if I can find that fire inside again. I don’t know exactly where it will lead and that’s perfectly fine. As long as I can feel my heart beating to know I’m alive and be with the love of my life I’ll be just fine.

The Time I Met Steve Jobs

Today Steve Jobs resigned as the CEO of Apple. I’m not surprised, it was bound to happen, but I think it came as a surprise to most.

I’ve seen a lot of people recount about Steve Jobs and the influence he had on them. That he’s been super influential is of no doubt.

I was fortunate enough to work at Pixar for a time. I started right as the Disney acquisition was being finalized and Steve wasn’t around as much after the deal was finished. I did get to meet him briefly. I was on the second floor of the main building on the West side. I was heading into the restroom and nearly bumped into Steve on his way out.

I said, “Sorry Mr. Jobs.”

He gave me a little smile and said, “It’s Steve. Have a great day.” And off he went towards his office.

It made my day.

Merge From Tumblr

At some point I thought I’d have a stab at keeping a separate developer diary on Tumblr. The thought of keeping two blogs going (not that I was posting often to Dan’s Dev Diary) gave me pause.

I’ve pulled all the posts from Dan’s Dev Diary to here and left them in chronological order. I’ll leave the tumblr blog up as long as Tumblr sees fit to host it. From now on all posts will only be here.

Posting to Octopress From MarsEdit

I recently switched to Octopress to start blogging again. Many are the varied reasons I switched, but the main one is that Octopress is that it’s a static blog.

When I had my WordPress install I used MarsEdit to write and post to my blog. It works via established calls to the database software. As Octopress is a static blog the software runs locally and generates all the pages before pushing them to the proper location on a server.

MarsEdit has basic support for another static blogging engine called Blosxom (which is what this blog used back in 2003). Using the Blosxom support in MarsEdit I was able to write a script to take in the saved file, generate a new post, put the text from the saved file into the new post, optionally commit and push in the Octopress git repo, and then use the Octopress software to generate and deploy the new version of the blog.

It’s quick. It’s a bit dirty. But here it is for anyone to use. You can find the script on github as octomars.