Hi! My name is Brandon Noad, and I am a Computer Science student at the University of Waterloo. This term I was selected to participate in the UCOSP program where I get to work on an open source software project with other students from around the globe—for credit!

The project I was assigned to is called GeoTrellis. GeoTrellis is a Scala library and framework for creating useful, high performing web services that load and manipulate raster data (visit the GeoTrellis documentation and GitHub pages for more information). You can check out a cool example of GeoTrellis in action here.

In the past few months, I have completed Coursera’s “Functional Programming Principles in Scala” course, written a web application in Scala using the Play framework, and attended several local Scala Meetups here in Waterloo. I really enjoy programming in Scala, and GeoTrellis was at the top of my list of project choices because I wanted to continue to improve my Scala programming skills. Although I had very little experience working with geospatial data, I was able to get up to speed quickly with help from my project mentor Rob.

To prepare for the UCOSP Winter 2014 code sprint, I completed the following list of tasks:

  • Forked the GeoTrellis repository (my fork).
  • Built the project using sbt and ran the unit tests.
  • Submitted a pull request to fix a typo in the README.
  • Created a new test file containing a FunSpec test with ShouldMatchers that runs a single unit test. This test creates an Array of 100 random integers, sorts the array, and checks to make sure that for every i, j in {0 … 99}, if i < j, then array[i] < array[j], where array[x] represents the xth element in the sorted array.
  • Completed the GeoTrellis web service tutorial.
  • Worked on one of the project’s issues (#678).
  • Submitted a pull request to fix issue #678.
  • Read chapters 1-15 of “Programming in Scala”.

This term’s code sprint took place at Facebook HQ in Menlo Park, CA. It was my first time in California, and although California is supposedly in the midst of a drought, it rained for most of the weekend. That said, I was just happy to escape the polar vortex, so I wasn’t going to let a bit of rain ruin my trip. At the sprint, I had the opportunity to meet my project mentor, Rob, and the other students working on the project—Mitch (UBC), Jonathan (MIT), and Armstrong (BU). Overall, I had an amazing time. Besides coding alongside my teammates, I listened to a couple of engaging talks by Scott Chacon and Jay Borenstein about GitHub and startups respectively, visited Stanford’s beautiful campus, ate a lot of beef jerky (mmmmm), bowled my first turkey, and had a cup of tea in downtown San Francisco.

One of the challenges for the sprint was to identify an action plan for the rest of the term. My task is to implement a Scala wrapper for the JTS Topology Suite that facilitates vector to raster operations. By using Scala language features such as sealed classes, we can leverage the power of Scala’s type system to make working with vector data much more enjoyable for developers. Rob thinks that if we design and implement this wrapper well, it may become the “go-to” solution for working with vector data in Scala. Once the wrapper is complete, the next step is to create a Feature library on top of it to replace the existing suite of vector operations in the main GeoTrellis project. At the sprint, I began working on the wrapper and submitted a pull request after implementing intersection, union, and difference methods for the various geometry types. It’s exciting to be working on such a meaningful project.

The GeoTrellis team uses a fairly standard Git/GitHub workflow. We create topic branches off of master for the issues/features we are working on, and we commit to the topic branches locally as well as regularly push any work done to the same named branch in our forked GitHub repo. After hearing Scott Chacon speak at the sprint, Rob decided it would be a good idea to open pull requests as early as possible (e.g. after your first commit). These pull requests then act as a form of code review, allowing us to communicate and receive feedback about our work. Once our work has been reviewed and approved, it can be merged into master.

To keep in touch with Rob and the rest of the team, we have a weekly standup meeting via Google Hangouts. GeoTrellis also has an IRC channel (#geotrellis) on freenode and a mailing list.

If you have read this far and are still wondering if you should apply for UCOSP next term, the answer should definitely be yes! Meeting and interacting with the other students at the sprint was an amazing experience, and my confidence that I belong alongside other software developers has grown as a result. Having the opportunity to do version control, unit testing, and code reviews on a real-world software project has been an invaluable experience so far, and I am certain that my skills as a developer will continue to improve throughout the rest of the UCOSP program.