Blog Archive

Viewing page 1 from archive of July 2013

Render Heatmaps

Are pictures worth 1000 statistics?

Debugging rendering issues can be particularly problematic. Many times, the efficiency of standard debugging procedures (e.g. printing intermediate values, or using a debugger) fall apart at the sheer volume of data they will produce when you are calling them millions of time per frame.

Often, intermediate values can be dumped out via an AOV (i.e. to another image), and inspected as an image. For example, if you were interested in how long various parts of the image are taking to render vs. the others, you could create a heatmap such as:

In this particular example, however, there are a few drawbacks:

  1. RSL does not have any timing functions;
  2. every shader would need to be modified in order to collect these stats; and
  3. you generally only receive information from the front-most surface.

I set out to resolve those issues.

Read more... (4 minutes remaining to read.)

Posted . Categories: .

The UX of Coupon Codes

How to (try to) avoid confusion and apprehension.

Lately, I have been entering a number of coupon codes on the web, and have found them to be infuriatingly lacking in one respect: the character set used for the codes is not easy to type.

I'm sure we have all questioned at one point if a character in the code was supposed to be a 0 (zero) or O (upper-case letter O), or a 1 (one), I (upper-case letter I), or l (lower-case letter L). Usually you just pick one, and usually you get it wrong the first time.

I find it particularly strange, that Starbucks would go so far as to recognize this problem, but not actually fix it:

Starbucks Error Dialog

As a developer, there are a few increasingly dramatic ways to deal with this.

Read more... (1 minute remaining to read.)

Posted . Categories: .

Nginx May Cut You Off Early

How the default configuration bit me.

I very recently launched, a crowd-funding website for a short film I am working on. As a donator, you are able to upload an avatar to be presented with your credit. I had limited the file size to 2MB... or so I had thought.

Underneath, the site is built with Flask, served with Gunicorn, and behind an Nginx reverse proxy.

Unfortunately, I received reports that some uploads were failing and reported as "Error: undefined" to the user. Strangely, it didn't seem to be an error in the Python app, as I was not receiving any tracebacks when this error occurred.

It turns out that Nginx has some default configuration that I wasn't expecting.

Read more... (1 minute remaining to read.)

Posted . Categories: .

My Report Card

The second GitHub Data Challenge recently finished, and GitHub just announced the winners.

The first place went to The Open Source Report Card, which generates an English prose summary of your GitHub activity (from January to March 2013), and provides some charts to back it up.

My report card for that period is somewhat eerie (to me):

Mike is a serious Pythonista (one of the top 13% most active Python users) who loves pushing code. Mike is a nine-to-fiver who seems to work best in the mid-afternoon.


It seems—from their activity streams—that Mike and westernx are probably friends or at least virtual friends. With this in mind, it's worth noting that westernx is less foul mouthed

I would love to see a chart about my tendency to swear in commit messages.

Posted . Categories: .

RenderMan Textures from Python

In order to better understand the guts of Python and RenderMan, in the past I have implemented a number of proof of concept projects extending or embedding each. Previously, I combined my efforts by embedding Python into RenderMan as an RSL shadeop so that shaders could be written in Python!

Unfortunately, that code is lost to the ages, so I decided to revisit my efforts and produce something that could actually have applications: using Python as a source of texture data for RenderMan.

Read more... (3 minutes remaining to read.)

Posted . Categories: .

Anatomy of a Maya Binary Cache

DAGs all the way down.

On a limited number of occasions I have had need to reach directly into some of the raw files produced by Autodesk's Maya. There isn't much documentation I could find on the web, so I will try to lay out what I have learned here.

The generic structure is based on the IFF format, but with enough small changes to warrant this exploration (with lots of kudos to cgkit's implementation, which helped with some of the gritty details).

Read more... (6 minutes remaining to read.)

Posted . Categories: .

Resources for Learning Python

We can do this the hard way, or the easy way...

I am often asked my opinion on how to get starting with programming, and usually with Python in particular. I usually outline three different routes that must be taken: learning how to work with Python, learning best practises for Python, and reading lots of good code from others.

Read more... (2 minutes remaining to read.)

Posted . Categories: .

A Pool of Shotguns

A transparent connection pool for the Shotgun API in heavily threaded environments.

I have been working very heavily with Shotgun for the last several months, creating much deeper integrations between it and Western X's pipeline.

One of the things that bit me pretty early on is that the official Python API for Shotgun can not make parallel requests.

Under most conditions this isn't a big problem; the underlying connection would just serialize my threads' access to the Shotgun server, adding some latency, but it wasn't too bad. What was very irritating, however, was that a particular version of Python on OS X 10.6 would occasionally segfault during parallel requests. It took quite a few days of debugging Python in GDB (not a particularly easy prospect, especially since the problem was hard to reproduce) to isolate the problem to a bug in the ssl module's use of zlib to compress the request before sending it to the server.

Read more... (2 minutes remaining to read.)

Posted . Categories: .

SIGGRAPH 2012 - Day 5

Until Next Year

This happened to me last year as well, and similarly with the smaller Vancouver SIGGRAPH events in the past few months, in which I lose perspective in the massive sea of expensive blockbuster film work:

We have gotten to the part of #siggraph where I develop a persistent rage for not being involved in enough awesome things. #neverenoughtime

@mikeboers on . Visit on Twitter.

However, perspectives need to be kept in check. My short, Blind Spot, has been doing rather well lately, getting into yet another festival (I think that is 6 now), and the VFX of that film was the result of only two people working in their spare time.

But for now the plan is to feed off of the helpful part of my rage and do the best job I can do, both at work, and independently. I'll be back next year, hopefully knowing a few more of you and having a slightly larger influence on the industry and presented works.

Posted . Categories: .

SIGGRAPH 2012 - Day 4

On Massive Projects

Sessions continued like normal, with me learning too much and inspiring me to try working with way too many of them... like normal. There was a theme that I kept hitting on this week, however, that requires some additional reflection.

My work in this industry thus far has been constrained to (relatively) small projects, mainly on episodic TV or direct to DVD movies. However, many of these sessions (not just the production sessions but also many talks and tech papers) reveal to me that the scope of these projects is at a completely different level than I am used to.

For example, I attended the ILM Battleship presentation on the 4th day in which there were a number of stats thrown around for a particularly heavy shot (the presenter said that he believed it to be the most complicated VFX shot, ever) including that it took 2-5 days per high resolution fluid sim (of which there were many), they cached approximately 20TB of simulation data, and it consumed nearly 23 years of sequential CPU time. Another was during the Disney Paperman presentation on the 5th day in which the director talked about how casually it seems like he was handed a few dozen animators who just happened to have some spare time.

These scales (of both tech and personel) are staggering since the majority of the work I have done in the industry has been limited to what can be accomplished in a few months by a handful of people, but I am very excited (although terrified) to hopefully be a part of these sorts of massive projects in the future.

I also greatly appreciate that the people who are involved in these projects still respect the work that us little guys do, as demonstrated by a number of the Pixar engineers when I discussed my work on The Borgias with them.

Posted . Categories: .
View posts before August 09, 2012