Monthly Archives: February 2009

The Third Bucket of Transformation

A few days ago, Duncan Davidson wrote a great piece called The Third Bucket where he broke down photography skills into three buckets: soft skills (craft), hard skills (science), and a third bucket, which you might call “art”.   

For a while, I’ve personally been focused at thinking about photography in these two buckets, craft and science if you will. But, just as I got too comfortable with that thought, something in the back of my head sits up and points out that I’m missing something important. There are skills that don’t fall into either the craft or science buckets. These skills include the ability to conceptualize what you want to communicate in a photograph, the ability to provoke an emotional response in a viewer of the work, the vision to look at things in a way that is intriguing, or the ability to suss out what is important in a fast moving and world changing event. This is the real art of photography. It’s what transcends simple documentation into an image with the power to either move one to tears or a smile, or even to change the world.

Duh! How could I miss that one for so long. Maybe because it was so obvious? Sort of like air? It was surprising to me, considering all those years I spent in architecture school.

The problem with this last bucket is that it’s really hard to talk about. It’s full of things that are hard to describe in words. The je ne sais quoi. Exposure? Easy to communicate in words on a variety of levels. The feeling of a photo of a baby? Obvious, so obvious that words aren’t necessary. What makes a photograph from a war zone make people want to stop making war? An awful sublime, but so very hard to put words to.

This is something I’ve been pondering myself. I’ve gone from taking pictures, simply reacting to what is around me, to making pictures – working to arrange the circumstances (as much as possible) to create a picture. Once you make this jump, you are soon confronted with some of the questions that are in Duncan’s third bucket. I’d also put the whole question of artistic vision into that bucket as well. What am I trying to say? To who? And what is my style of saying it? I’ve gotten into a stereotypical artist’s funk about all of this, with not quite an end in sight.

Fortunately, the day after I read Duncan’s piece, I saw Zack Arias’ video “Transform” over at Scott Kelby’s blog. It’s strangely comforting to know that someone of Zack’s caliber has some of the same feelings. It obviously touched a chord with many other people as well, judging from the comments and the Twitter reaction.

Back into it…

Refactoring in the Functional Programming world

I’m an Emacs guy. I was first exposed to Emacs back in 1984 on a VAX running BSD. This was prior to GNU Emacs, so the Emacs that I saw was James Gosling’s Emacs. At the time, I was working on a compiler for a functional programming language called SUPER, which was evaluated using combinator graph reduction.

For many years, and across many languages, including Scheme, C, C++, Perl, TCL, and Java, Emacs was my tool of choice. My hands had the muscle memory for the keystrokes, and over those years I accumulated a file full of Emacs-Lisp customizations for Emacs (by this time, mostly GNU Emacs). When Eclipse started to support refactoring I started using Eclipse as my primary tool for editing Java programs. Refactoring is an example of the kind of high leverage features that I want in my programming tool set.

A few days ago I found some gems buried in a thread on the Scala mailing list. Dave Griffith has been accumulating a list of refactorings for Scala. Here’s his complete list:

Curry Method (split a parameter list, and the arg lists of all callers).

Uncurry Method (merge split parameter list, including merging the arg lists of callers. If method is called with partial args, either complain or automatically create a helper method which represents the partial application, and replace partial calls with it.)

Extract Trait (including searching for other classes which can have the same trait extracted. Tricky with super calls, but not impossible)

Split Trait (splits trait into two traits (putting in self-types if needed), change all extending classes to extend both traits)

Extract Extractor (select a pattern, automatically create an extractor)

Extract Closure (similar to extract method, but creating a function object)

Introduce by-name parameter

Extract type definition (obvious)

Merge nested for-comprehensions into single for-comprehension (and converse)

Split guard from for-comprehension into nested if (and converse)

Convert for-comprehension into map/filter/flatmap chain (and converse)

Wrap parameter as Option (converting null checks, etc.)

Convert instanceOf/asInstance pair to match

Replace case clause with if body to guarded case clause(s)

I was particularly interested in those refactorings related to functional/higher-order programming and pattern matching. Between the surge of interest in Scala, F# and Haskell, it looks like there’s room for some more work in refactoring.

Py3k sprints

The call for sprints at this year’s PyCon 2009 is now up.

If you are involved with a Python project and you are going to be at PyCon this year, may I suggest that one topic for your sprint be porting your code to Python 3000? This is the perfect opportunity to work with other people who will likely be doing the same, while having access to the Python 3000 developers. Transitioning to Python 3000 is one of the opportunities/challenges for the Python community in the next two years. More about that at the conference.

Register for PyCon 2009

Registration is now open for PyCon US 2009. Like last year, PyCon is being held in Chicago, and the official program looks pretty good. As is true with all conferences, the unofficial program (the hallway track) is always great at PyCon. I am also going to make a concerted effort in the Open Spaces portion of the conference.

There will be a week of sprints held after the conference, so if you are looking to get involved with a Python project, those are a great opportunity to get a quick start while sitting side by side with some of the project developers.

I’ve gone to quite a number of conferences due to my job responsibilities over the last few years, and PyCon is definitely my favorite conference.

Northwest Python Day

Northwest Python Day

This weekend I attended the Northwest Python day. Actually, more properly, I attended the afternoon half of Northwest Python day. We’ve had some illnesses making the rounds in our house, and we had to do some creative schedule juggling on Saturday. In any case, the day was organized mostly by people from the Seattle Python User’s group, and run in a very low key fashion. The organizers managed to secure a decent size room at the University of Washington, and people worked together to bring some food and so forth. The program consisted of presentations that people volunteered to do – we had just enough to fill the day. A Python get together of any decent size just isn’t complete unless there are lightning talks, so there were two sets of lightning talks during the day.

My favorite talk of the day was William Stein’s talk about the Sage symbolic math system. Sage is a system in the flavor of Mathematica, Maple, or Matlab, and if you need to do any kind of symbolic math at all, this seems like something that is well worth looking at. One thing that I particularly liked was the use of a local web browser as a way of maintaining the worksheet/notebook workspace that is common to this class of applications. I was impressed to learn that Sage’s UI code actually contains a Javascript translation of the TeX layout engine for math, which is the gold standard for formatting math of any kind. Very cool stuff. I gave a talk on some of the Python projects that we have underway at Sun, and I tried to motivate my description of those projects with a bigger picture look at the state of the “market” for dynamic languages. The talk included some of the material that I used for my PyCon UK keynote and added some more Sun specific details.

This was my first conference of the year, and a good start.