Monday, May 23, 2011

GSOC

Coding begins full throttle today. I spent my community bonding period trying to acquaint myself with libsoy conventions, lurking on IRC, reading the back entries of the PySoy wiki and the developer's blogs. I read a wonderful book on OpenGL.[1] And then I spent my weekend having the sort of adventure one recounts in blog posts.

I drove up to Salt Lake City (about 300 mi. away, which is about 4.5 hours on Interstate 15) with my sister to attend transfer orientation at the University of Utah, where I'll be attending this fall. Then we received word that my dad was booked into the ER due to a kidney infection. So we rodded homeward at about 1 AM, and almost made it too. There were a lot of ways I could have imagined the trip home ending badly -- being pulled over by one of Utah's finest, for example, or encountering some driver asleep at the wheel. What I didn't count on was my Xterra's radiator bursting at an altitude of 20,000 km, spewing antifreeze all over the engine and coating the bottom half of the windshield with a green mist.

We pushed the Sherman tank of an SUV to the nearest freeway exit (about 7 miles, but mostly downhill, thank god). Caught a ride over to Intermountain Health Care and retrieved my dad (he was fine at this point, just souped up on Lortab) and took him home around 4 AM. I slept on his sofa until the six-year-old ran through the house at about 7 AM, then got up and went home. Let the coding commence.

My GSOC project is an ambitious one. Unfortunately at this point there is not as much infrastructure as either the PySoy maintainers or I had anticipated there would be. So the first thing I will be working on before I move to mesh morphs (proposal) will be base mesh support. There's a lot to do, and nobody really has any idea how to do it.

That's not good. I can already feel myself shifting into analysis paralysis, something I struggle with regularly on any undertaking of any complexity. For my first massive (20,000+ lines) project, a ColdFusion API for my employer's enormous CRM, my solution to analysis paralysis was to launch into coding, winging it as I went. The result was one of the most buggy pieces of barely-functioning crap I have ever written. The second time I tried such complex work, I did it by pouring a lot of thought into it before I started, refactoring constantly. The result, my company's infant PHP framework, MagicPHP, was cleaner and much more useful, but took way longer than it should have.

My plan of attack for this summer to dodge the almost inevitable paralysis is thinking about the base case. Put some thought into more complex use cases, and then forget about them. Go for what utility I can get out of the minimum possible implementation. Refactor a lot. This strategy is my only hope for not failing epically this summer.

Time for some hackery :)

[1] Learning Modern 3D Graphics Programming, by Jason McKesson, available for free here. It is the most useful book on OpenGL programming I have read because it focuses on the programmability of OpenGL. Most tutorials and books on the subject merely issue a step-by-step instruction for a specific task (this is how you make a teapot), whereas this book helps you think like a graphics programmer.

Friday, May 13, 2011

Two in the morning

I don't know what to write. Considering how long I have been on the Internet, it's interesting to me that this is the first blog post I have ever composed. I don't consider myself much of a writer. For one thing, I don't often have much to say. I'm an information accumulator. I hoard information.I treasure it. Those who want me to give some of it up--to give away the knowledge that's mine, my precious--they had better be prepared for a tide of consciousness. Make sense of it later. They're lucky I even bother to form sentences, instead of just spewing out random syllables and glaring at them for not getting it.

As part of the Google Summer of Code, I'm expected to blog semi-regularly. I think that's a good thing. Now I have to write; I'm looking forward to that. I need to be better at written communication. It's like anything, in that the more often you do it, the better at it you'll be. Too much of my time has been spent writing things meant only for the compiler. I've stopped writing for humans, and my writing has fogged up. Clarity used to come easily, and now I have to labor for it. Writing hurts, like exercise. But I need to do it more.

As part of the PySoy project, I'll be working on support for mesh morphs. I'm expecting to learn a lot about 3D rendering. But I'm expecting to learn more about people. How to function independently in a wider organization. How to build consensus and get things done. That's going to be the real benefit I get out my summer.