OpenGLContext and Python Imaging Library on Mac OS X 10.5.5
I was trying to run the OpenGLContext demos and found that there was an annoying runtime issue.
WARNING:context:Unable to load node implementation for MMImageTexture: <module ‘OpenGLContext.scenegraph.imagetexture’ from ‘/Library/Frameworks/Python.framework/Versions/Current/lib/python2.5/site-packages/OpenGLContext-2.1.0a2-py2.5.egg/OpenGLContext/scenegraph/imagetexture.pyc’> has no ‘MMImageTexture’ attribute
It turns out that I had not satisfied the Python Imaging Library prerequisite. I tried using MacPorts to download and install py25-pil, but it choked on the Makefile. I googled around and found a thread on building Zope that referenced this article. The suggested fix is to remove all references to ‘-arch ppc’ in Python’s Makefile, located at ‘/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config/Makefile’ on my system. I can confirm that this works on Mac OS X 10.5.5.
Update: While it seems that the Python Imaging Library is working correctly otherwise, jpeg support does not work; my guess is due to a misconfiguration by MacPorts when installing the libjpeg dependency. I’ll post a resolution if I find one.
User Surveys with Google Forms and Blogger
Here’s one problem that I’ve run into while writing the first two version of projectnightout:
- I’d come up with a number of hand drawn mockups for the application
- These mockups would be turned into HTML mockups
- I would present these mockups to those of my friends that were willing to give up some time to participate in a user interview
- I would incorporate suggestions into new revisions of the mockups until I was happy with the level of functionality and usability
- I would create a schedule for the current state of the application and code until the version was done
The problem with this process was that it resulted in applications that nobody seemed to like. I’ve identified the following issues with this process:
- While this process is more light weight and requires less documentation than a traditional waterfall process, it still falls into the same trap of designing in a vacuum and failing to incorporate user feedback.
- The amount of user feedback that I could accurately record and review in this process was limited to the number of people I could get to participate in my user surveys.
- The turnaround time for finding out that a version of my product sucked was equivalent to the development time scheduled for that version.
- The level of integration between the data and presentation layers was too great because the sole purpose for their existence was to create an implementation of the mockup. An invaluable piece of advice that I was given was that the data layer and presentation layers should evolve in isolation while both attempting to solve the same problem. In practice, I’ve found that this approach ensures that the data layer provides more than the required amount of data for the presentation layer; as the presentation layer evolves and present more and more data requirements, the expectation is that the data layer implementation will have already taken this into account and the complexity of the controller code can be significantly reduced.
One thing that I’ve been doing recently to combat these issues is utilizing a more user centric design process in the creation of new mockups for projectnightout. Google Forms has proven to be really useful for this purpose because it allows users to submit responses to a questionnaire about a particular mockup and the data submitted populates a Google Spreadsheet. I present these questionnaires to users embedded in a number of Blogger posts that are accompanied by mockup screenshots and short descriptions about the purpose of the mockup. Another advantage of this approach, is that users can be walked through a use case using links to other such posts without direction.
The above image roughly details what I’m talking about; it’s an image of the private blog that I use to acquire user feedback about designs that I create for projectnightout.
What I Do With My Spare Time
If you’ve taken a look at my resume, you might have noticed that in university, I started a poker club. At the time, poker was huge and I was caught up in that world for some time. One of the more interesting encounters that I had was with a pair of card mechanics that were trolling the local university poker games. Needless to say, they were ejected from the game after some questionable hands. Ever since then, I’ve been quite fascinated by the skill involved in card manipulation. The topic was far more extensive than I ever knew. I was introduced to a book called Robert Giobbi’s Card College by a friend of a friend who worked at Amazon, while I was working at RealNetworks in Seattle; they too happened to be an amateur card magician. The following is a trick that he showed me:
To the uninitiated, what you’ve just witnessed is my attempt at a riffle pass. This sleight of hand is a variation of the classic pass, a staple of card magic.
Six Month Review
It has been a while since my last post and about six months since I’ve began my startup endeavor, so I’ll try to recap a lot of things that have happened since that time. The last time I posted, I was in the midst of development of the first revision of projectnightout.com. At the time, this project was still known as plannr. I encountered a number of problems during the design of the site that forced me to refine my development methodology. Soon after I realized that this revision would not yield a product suitable for mass consumption, I went back to the drawing board, and came up with a number of mockups for a next revision of the site while travelling in Asia.
(As an aside, I travelled to Japan, Thailand and Hong Kong with my girlfriend and a friend of mine during the summer. We climbed Mount Fuji, which was definitely a grueling, but ultimately worthwhile experience.)
This revision of the project seemed to be a more clearly defined implementation of some ideas that I had for this project. Thus, after three intense weeks of starting from scratch, I came up with the main event creation workflow, as well as a number of supporting pages that were necessary to implement as dependencies, ie. registration, user settings, profile, etc. Thus, projectnightout.com silently launched on September 26, 2008. You can see some footage of the site in action here:
This release was meant to iron out some deployment issues before the official private beta launch. However, since I was winding down from a long programming stretch (I changed my sleep schedule for a few weeks to work during the nights and sleep during the day to increase my productivity), I decided to solicit opinions from a number of my friends that are also in the software industry.
The responses were overwhelmingly average, there were a lot of good points about usability that were brought up, as well as a handful of known issues. I’m currently mulling over these issues and recalling the the advice of Dharmesh Shah in his article about Startups and the Power of Polarization. This leads me to believe that another revision is in order. I’ve identified a number of key issues that I need to work on and I think it’s time to go back to the drawing board.
Reflections on IT Consulting
For some time now, I’ve been attempting to write a post expressing how I feel about IT consulting; sufficed to say, I am no longer an IT consultant. I don’t think there’s anything I can say about my stance on the topic that would be convincing without the reader having first hand experience, so here’s some of the material that I’ve come across that I found to be provocative.
- The Wetware Crisis: the Dead Sea effect
- The Truth About IT Consultants
- Reality Check
- Rules of Consulting
I’ll leave it to the reader to form their own opinions on the topic.
Reminiscing A Snowboarding Injury
It’s been a while since my last post, so here’s a brain dump of everything that’s been going on recently.
I’ve been using Assembla to host my Mercurial repository as a bonus, it seem that they have Trac integration. My project is fast approaching its first milestone and I’m pretty excited about the new features that we’re working on for the next milestone.
Other than that I’ve been occupying my time some running and playing guitar. If you’re a guitar player, I highly suggest checking out the Rock House series of instructional videos. I’ve taken private lessons before, and I’d definitely say that these videos are far more engaging and help you progress faster.
For those of yo that know me, I’ve been undergoing physical therapy for a snowboarding injury that happened in December of last year. Should you be interested in snowboarding, I do not recommend getting your shoulder dislocated while doing so. Though I’ve been a snowboarder for a number of years, ever since sometime in high school if I recall, I’ve never really injured myself.
At first the experience of dislocating your shoulder seemed interesting, I wasn’t doing anything particularly spectacular at the time of my injury. I recall being able to see the chalet and riding pretty fast and then suddenly I was on the ground. Upon trying to get up, I realized I couldn’t move my right arm, which was fairly numb, so the pain hadn’t started to kick in yet. Both my girlfriend and friend were with me at the time and they graciously offered to drive me to the hospital after the field medics concocted a makeshift sling for my arm. At the hospital, I was notified that I was something like the hundredth snowboarding injury they received on that particular day; I detected a note of disdain from the people in the emergency room whom had obviously seen too many self-inflicted snowboard injuries that day. The pain started getting worse while waiting in line in the emergency room for a doctor, but I’d say the most interesting part of the experience was getting your shoulder popped back in. It wasn’t what I expected; I think I’ve been brainwashed by action movies, because they popped it back in not by quickly jerking my right arm, but by slowly raising it overhead until there was a loud snapping noise followed some exacerbated profanity on my part.
All things considered, the experience of dislocation and relocation wasn’t so bad; however, physical therapy for this particular injury has been the most excruciatingly painful thing that I’ve had to endure and it has been going on for several months now. Although I have a greater range of motion than immediately after my sling came off after my injury, whenever moving my arm to an extreme orientation, muscles begin to shake which is not at all pleasant. In particular, I have not so fond memories of my physical therapist working on my exterior rotation.
On a completely unrelated note, a friend of mine from university submitted a video called ‘Velcro shoes’ for a contest sponsored by Microsoft; you can find it here.
A Brief Interlude
Earlier this week, I had a visit from one of my good friends with whom I’ve worked on a large number of projects with over the years; most notably, we worked on a real-time operating system kernel running a model train simulation. I asked him to collaborate with me on my current project and perhaps throw some new ideas into the mix while doing some random development.
One very interesting idea that came up was a physical caching system for warehouses. Based on a number of orders that would be received from a large warehouse that was required to move inventory according to a schedule, we predicted that it would be possible to reduce the amount of travel time spent by individual workers by working out an algorithm for placing items that were more often requested closer to the shipping dock. We realized that a warehouse was very much like a multi-threaded threaded application, with obvious elements of uncertainty that come into play. However, we abandoned this idea after some time because our estimates predicted only a nominal improvement in their order fulfillment process.
We concluded that some more research had to be done regarding supply chain management and existing ERP systems. This is an article that I came across while doing this research; it superficially depicts some of the processes employed by Amazon’s warehouses.
Bjarne Stroustrup @ UWaterloo
A friend of mine recently notified my that Bjarne Stroustrup, creator of the C++ language, gave a talk about the new features introduced in the C++0x standard. A video of this talk can be seen here.
The talk is hosted by the CS Club at my alma mater; it is one in a number of very interesting video and audio clips that the club hosts here. Amongst my favourite are the sessions hosted by economist Larry Smith, who delivers some stirring lectures about business and technology.
OpenCV Framework for Computer Vision
I ran across this article and thought it’d be cool to try out that script on my machine. After playing around with trying to compile xawtv on my machine, I ended up just just taking a snapshot with the built-in iSight on my Macbook Pro and feeding it into the script. The script doesn’t do much more than make an API call to OpenCV; some more investigation into the OpenCV framework reveals some interesting documentation, here. I’ve found that the framework is pretty good at detecting upright faces, but the algorithm seems to have more trouble detecting a tilted head.
As a note to anyone else trying this on a Mac, there’s some work involved in trying to get the script in this article to compile. Xawtv seems to require the ’soundcard.h’ or ’sys/soundcard.h’ header for compilation. As I understand it, these headers define a number of constants required by the Open Sound System (OSS) API. Even after defining these constants, I believe there were some further unresolved symbols required by xawtv, as of version 3.95. I ended up switching to gstreamer since it was readily available via macports.
Mercurial for Distributed Source Control
A friend of mine turned me on to the distributed version control system Mercurial. It looks pretty awesome; the main selling point for me was the ability to host a source repository in a decentralized fashion. Other things that I thought were cool were the ability to work offline and the integrated web server that allows you to publish your local repository. I’ve found these links useful in my investigations:
I’ve also attempted to find a good Mac OS X GUI for Mercurial, one that looked promising was the Mercurial Eclipse plug in, but I found this to be somewhat cumbersome; I ended up reverting to the command line.

