This summer I worked with the Unidata tech team on addressing the MetPy 1.1.0 milestones we prepared for it to update from version 1.0.0. Throughout this process of learning how to navigate GitHub and MetPy and how to implement new code, code verification and testing played a large role.
During the beginning of my internship, I devoted a great deal of time learning how to use Git and Github to collaborate on software development projects. After gaining this experience, I began improving documentation for a variety of Unidata remote repositories. I started with the netCDF-C repository and then moved on to the MetPy, Siphon, and Python Training remote repositories. This work was significant as it ensured that software users were able to locate resources, properly download software, and learn how to operate the software via informational materials.
During the duration of this summer's internship program I hit the ground running by learning how to code in Python. Before this internship, I had only opened Python a few times while attending classes and did a little coding in this language for a collaborative project at my university. I familiarized myself over the first month by using the workshops available in JupyterLab provided by Unidata. I learned everything from loops to using the THREDDS data sever to plot variables. Outside of the language, I got to learn how an online community works with GitHub to share and process software and data. I also learned about development environments, which I had no clue about before. I will definitely be using all of these tools moving forward.
Coming into this summer, my goal was to integrate Dask Array support into MetPy. I knew that this was an ambitious task, but I am happy to say that I made progress toward accomplishing it!
This summer at Unidata I worked on expanding functionality for both the netCDF C++ library and the Python data access tool Siphon. Previously, the netCDF C++ library was lacking important functionality that was included in other netCDF libraries. Fortunately, adding this functionality is a straightforward process. I created function wrappers in the C++ library that would call previously made functions in the C library. This allows those working in a C++ framework to continue to use the netCDF libraries without sacrificing additional functionality.
The primary task that I completed this summer was adding METAR functionality to MetPy. METAR stands for METeorological Aerodrome Report. METARs contain information about surface data including temperature, dew point, wind speed and direction, and several other meteorological variables. Prior to this summer, MetPy did not have the ability to parse METARs. Also, the current parser that is used to generate netCDF files on the Unidata THREDDS server had a substantial amount of missing data. By adding METAR parsing tools, we made additional surface data available to the user, making it easier to make high quality surface maps using MetPy.
The overarching theme of my projects this summer has been improving the accessibility of the Integrated Data Viewer (IDV) for the average scientist. The IDV is a versatile and powerful, though complicated, program.
When I ask people if they've heard of the IDV, there are two types of answers that stand out. The first, a simple “no” or “I think someone mentioned it once.” The second, something like “I've tried to figure it out, but didn't get very far.” I worked to reach those who gave the second answer.
During this past summer at Unidata, I worked primarily on MetPy by implementing cross section functionality and improving xarray integration. The ability to work with cross sections in MetPy has been frequently requested by users, and it was one of the major features present in GEMPAK but still missing from MetPy. Also, since MetPy is moving towards having xarray DataArrays and Datasets as its primary data structures, the development team thought it best to implement the new cross section interpolation and supporting calculations using xarray.
During my time here at Unidata, I've focused on extending the THREDDS Data Server (TDS) web interface and services. I spend the first few weeks of the summer redesigning the interface to be more intuitive to end users and implementing UI changes using Thymeleaf HTML templating. The new TDS catalog pages are designed with a "plug-and-play" structure, allowing users to override or insert their own contributed HTML, which is processed by a server-side Thymeleaf template resolver.
Editor's note: Josh Clark was a Unidata Summer Intern in 2015. He graduated from the University of Northern Colorado (UNC) in the spring of 2015 with a B.S. in Meteorology, and is headed to the graduate program at San Jose State's Fire Weather Research Lab starting in the Fall of 2015.
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.