Exploring Python as an Interface to Unidata Technologies

An example EdexPy interface (click to enlarge)

It is hard to believe my time here at Unidata has come and gone so quickly! Next week, I imagine it will be back to the “harsh” reality of being a student — sitting on a beach somewhere near Monterey or perhaps fly fishing the Sierras over the next twenty days awaiting the start of my first year of graduate school at San Jose State. What a terrible reality that will be!

This experience at Unidata and UCAR has been an incredible opportunity and I am privileged to have been afforded these ten weeks. When I started here, I envisioned an entirely different internship than what previous interns had completed. Rather than developing one particular project, I focused my time on gaining a greater understanding of software engineering as a whole and contributing to existing Unidata projects. I found a comfortable spot working with Unidata Python developers Ryan May and Sean Arms, and within one week I had learned a great deal about unit testing, code health, automated testing, and version control. Later, I would implement these principles in my first Python library, MesoPy.


MesoPy is a small wrapper library (available on Github) for the MesoWest API (http://mesowest.utah.edu/). It provide Python users with access to meteorological surface observation records from over 40,000 stations around the United States. In just a few lines, a user could retrieve up to 100,000 station-hours of data in a variety of formats. For example, wildland fire personnel could monitor a custom list of remote automatic weather stations (RAWS) in the vicinity of an active fire to aid in resource allocation and attack decisions or a researcher could gather a climatology of all stations in and around a city to assess the urban heat island effect. This project has proven to be quite popular and I am pleased that the repository has seen over 1,300 unique visitors in the past two weeks. Further, with some coercing from Josh Young, Unidata's community manager, I was invited to present MesoPy's debut at the 2015 Unidata Users Workshop in front of many career academics and software engineers. Talk about throwing me into the lion's den! I enjoyed this experience and valued the opportunity to formally introduce my own work to the public. I intend to support this project well into the future and will likely present this work at the AMS annual meeting in January 2016.

Providing new ways to support the earth science community via data services and tools is the central mission of Unidata and what I most enjoyed about my time here. I was encouraged to pursue new ways of presenting meteorological data and also was given the opportunity to contribute to existing Unidata technologies. For example, I explored creating a visualization suite using PyQT4 for the interface, Siphon for data retrieval, and MetPy, matplotlib, and cartopy for visualizing Skew-T diagrams and radar imagery. I also created three web applications using Flask to demonstrate rapid web development in python. The first was a map that allows the user to interact with historical fire occurrence data dating back to 1992. This was achieved using sqlite3 and the google maps API. The second app generates html5 videos of GFS forecast runs obtained from the THREDDs data server. The third app interacts with a new project called EdexPy to provide an interactive google map to display atmospheric soundings obtained from the AWIPS II EDEX server. Work on this app is ongoing and I expect to upload all of the apps to the Heroku cloud after I settle in San Jose.

PyQt interface
WAVE interface

Interacting with open-source projects was a new experience for me. Previously, I was hesitant to contribute to others' projects but gained confidence when I was invited to help with Siphon. During my time, I contributed several examples to Siphon, resolved a couple of issues, and presented Siphon to twelve attendees of the Unidata software training workshop. Outside of Unidata projects, I made contributions to flask-googlemaps, matplotlib, Cartopy, and bokeh. Lastly, I used the Unidata Python training workshop schedule as a template for a course I am developing to teach python to atmospheric science students at San Jose State perhaps next year.

In all, I would say that this internship was integral to my career development. It truly ignited my passion for software development in an atmosphere that encourages learning and trying new things. Although I was relatively inexperienced (it's likely I still am!), I felt comfortable working with more seasoned developers who helped me set goals and learn new concepts. I am forever indebted to Ryan May and Sean Arms for the time they spent helping me debug projects or sort through PyQt's 1,000 classes (literally). Also, Josh Young for acting as my personal think tank, Mike Schmidt for teaching me about computer hardware and equipment grants, Russ Rew for letting me take a picture in the NetCDF mobile, and Ward Fisher for helping me write a Microsoft Azure grant for my university. I had a fantastic time working here and I hope to stay involved with the Unidata community for a long time. Cheers!


Post a Comment:
Comments are closed for this entry.
Unidata Developer's Blog
A weblog about software development by Unidata developers*
Unidata Developer's Blog
A weblog about software development by Unidata developers*



News@Unidata blog

Take a poll!

What if we had an ongoing user poll in here?

Browse By Topic
Browse by Topic
« April 2019