Back in winter and spring of 2008 I took a semester off and worked full time for the European Space Agency in Greenbelt, MD as a programmer on the SOHO project team. They tasked me with exploring the feasibility and starting the coding on a new type of solar image viewing application. The new part is that instead of using old image file types, this application was to use the JPEG2000 file format. The reason behind this was that older file formats were not well-suited to deal with the beast that is solar data — solar datasets are absolutely, ridiculously large and contain lots and lots of important metadata. A second reason to move to the JPEG2000 standard was that Part-9 of the standard was a interactive protocol that allowed for extremely efficient network-based viewing of the images; thus allowing the solar images to be stored and viewed much more effectively.
I spent the first couple weeks just trying to figure out the technical details of the JPEG2000 standard — something that turned out to be both difficult and interesting. Once I had an inkling of the underlying concepts in play I started looking for available implementations. I quickly found the Kakadu library, which I promptly started using to create the application which was shortly dubbed JHelioviewer. (The name comes from the fact that Helioviewer already existed and this was to be the Java counterpart to it.)
I ended up finding a Google Summer of Code project by Juan Pablo Ortiz that seemed like a good place to start and spent the next several months with my nose to the grindstone, occasionally working 50+ hour weeks. The work was hard for me, after all I’m not really a programmer. I kept smashing face-first into technical roadblocks that a real programmer would have easily dealt with. Instead I would stay up late schooling myself on things like the Java Native Interface, semaphores, and what the heck a convolution was. I did a lot of reading and spent a lot of time writing code to figure out if I really did understand how things worked. Heck, at one point I spent several days tracking down a bug in some system C-code!
Overall I think the experience was really good for me. Since I was working more or less alone I had to rely on myself for almost everything. I had to take the initiative simply because there was no one else to do it. That is not to say that the guys I worked with were not helpful — I spent countless hours discussing ideas with almost everyone else in the department — but they were not actively working on the code. It was for all intensive purposes my code; I took a lot of personal ownership in it, and I believe that is why in my opinion it turned out well.
By the end of my employment I had created a working application that, although extremely rudimentary, was what they had asked me for. I spent the last week or so documenting and reorganizing the code in order to hand it off to the next person that would work on the project. When I handed the code off I was a bit apprehensive — I was worried that my inexperience might have irrevocably tainted the project. I am glad to say that I no longer believe this is the case. About a year and a half has passed since I handed the code over and many much more qualified people have worked on it since then. The result is that they have turned my mangled, proof of concept code into a functional and feature rich beta application.
There are two points I’d like to hit in closing. First is that I have an inordinate about of pride that a project that I initiated is turning into something big. It’s a real boost to the ego for sure! I wish the project nothing but the best. Second is that not only did my hard work pay off for the project, but the project paid off for me. After I left the project, the project scientist wrote up an article for Computing in Science & Engineering and included me as an author! (I feel bad that my name is on there as an author and I didn’t actually write any of the paper, but after reading it I realized that I did significantly contribute via the code I wrote and the discussions I had with the author.) The paper has been accepted as of June 2009 (what initiated this otherwise chronologically-misplaced post) and is awaiting the ‘production checklist’, whatever that is. A pre-print can be found at the bottom of the JHelioviewer site. I’m finally published!!!