Technical Information for KevinMorris.org
This site is intended to be my weather information portal and software development
sandbox for testing and developing skills in new programming languages and frameworks.
It has gone through several iterations since its inception in 2002: J(2)EE, .NET, and currently Ruby on Rails.
Weather was originally chosen as a domain because of the subject's rich and publicly available data sets.
This gives me an excellent backdrop with which to experiment with a wide variety of technologies.
- At a configurable time interval, several "miners" written in pure Ruby and running on
Ubuntu Linux crawl pages for pertinent pieces of information, in this case the current temperature
as well as the next week's forcasted high, low, and chance of precipitation. These miners fit into
a general framework based on the Template Method design pattern which allows me to simply extend
an abstract mining class if I ever want to add a new data item. These miners then upload their data
to a MySQL database running on my hosting company's machines.
- The application responsible for displaying the mined data is a Ruby on Rails application using out-of-the-box
scaffolding. The display application is completely decoupled from the miner framework mentioned above.
This allows safe failure of the mining framework if there is a network problem or the target pages change.
The display application simply displays the most current data it has available.
- The calendar allows a user to check the temperature for any time that is stored in the database. It
utilizes Yahoo!'s YUI framework to render the calendar and Prototype's AJAX libraries to make requests
to the server.
- The temperature maps visually display the high and low temperatures for the continental United States. The data used to build the maps come from a daily published sheet of temperatures for various cities, airports and other weather stations maintained by NOAA. The data source can be found here. Each day this file is parsed into a database using the Ruby Miner framework mentioned above. The locations in the file have been geocoded with the help of the Google Maps API via a module written in Groovy. These latitude and longitude coordinates have been plotted on a wireframe image of the United States. The various temperature values from the data sheet are retrieved daily by a Java application using the Spring framework and then plotted. The plotted values on the map are then passed through a module written in C for speed. This module extrapolates the various intermediate temperatures and plots those values accordingly. This two dimensional array is then translated into the image shown via Java image manipulation classes.