Server Administration
Minotaur trailer We are now running on the new production server. This is the second server we have successfully configured to generate the map. A quick list of the major components:
- Mapnik – the geographical rendering engine.
- Tilecache – caches the tiles for speedier performance
- PostgreSql – the database
- PostGIS – the database plugin that supports spatial data
- phppgadmin – used to help administer the database
We are both getting a lot better at Linux server administration, setting up security groups and samba shares and getting the static IP addresses set up is getting easier. Our development environment was a Ubuntu 8.04 32bit machine that is just about 6 years old, needless to say we were in need of something new. Our new box is a Virtual Machine (Host is Windows Server 2008, running Hyper-V, but more on virtualization later) and it’s running Ubuntu 8.10 64bit on a machine that has four processors and 4Gb of ram, it’s quite the improvement. We are going to be soft launching the map this week to select number of folks, and then we will fixing bugs, gathering feedback and looking forward to our official beta launch in early February.
We also just went though the process of rebuilding our subversion/bugzilla/development server which also runs on Ubuntu Server, As of this point we have configured four Linux servers (all Ubuntu Server). Not bad for a shop where Open Source was a bad word and server was synonymous with Windows.
The Italian Job full The Good Shepherd dvd
Development
There are a lot of ways to develop software, there are development life cycles that are studied in classes, and written and rewritten in books. Usually they go something like this (I took this from the Wikipedia page: Systems_Development_Life_Cycle):
Initiation/Planning -> Requirements Gatherings And Analysis -> Design -> Build or Coding -> Testing -> Operations and Maintenance -> then back to Initiation/Planning.
I, and I think a lot of developers out there, would much rather skip to the coding than spend hours and hours planning and writing pseudo code and gathering requirement and so on. And that is how this project has come to be. We were given some simple and vague requirements: make a better campus map, I’ll spare you from the ranting about the old one, other than to say it wasn’t to much of a challenge.
The obvious pitfall of this type of development is that things often have to be redone/reworked, but on the other hand I can technically call each rework an “iteration of the life cycle” and I’m safe from the academics. Honestly though, we may have gone through several versions of the way we are using GML, but each time we learned something new that improved functionality and our understanding of the nature of the beast.
One of the things I like best about this form of development is that i can start tinkering on day one, and a product appears quickly, it is of course in a very ‘alpha’ state but there is something to show, and I like that kind of instant gratification.
As one last note, I will say that we reworked the database schema several times, attempting to arrive at a solution that would work the best for our needs, and I think as of today we are finally there! it took a lot of code rewriting and polishing but at this point, through each iteration, the code is better and more efficient and our database is designed to allow for maximum flexibility as well as being tuned to make getting the data we need easy and fast.
GeoRSS
GeoRSS is nothing more than regular RSS with x and y coordinates. It is also integrated into OpenLayers, and creating a layer directly from the RSS feed is easy, and toggling on and off these layers is also fast and easy. Another thing OpenLayers does with GeoRSS is that it creates popups on click automatically, using the description and title elements in the feed. Another thing we are doing with GeoRSS is allowing other departments on campus access our data, while not giving them direct access to our database. We have set up different query parameters that dictate what information is returned. Specific building info, search results based on descriptions and tags, and even complete point layers. Using this they can create their own maps using the IT map server to serve up the base map tiles, and their own interface using OpenLayers, and GeoRSS to quickly and easily make their own web maps.
Another nifty thing we are using GeoRSS for is the ‘You are here’ layer. When folks are on campus we are able to use their IP address to make an educated guess as to what building they are in and then create a GeoRSS layer by getting a feed that has the x and y for that specific building. If we are unable to determine what building they are in the layer doesn’t show up at all.
Cinderella II: Dreams Come True trailer
Blue Gold: World Water Wars divx
Red Rock West buy Along Came Polly hd
GML
Van Wilder 2: The Rise of Taj move
GML is an excellent way to produce interactive features that can be overlayed on ones map. We stumbled upon GML early in our quest for an interactive map, we got most of our concepts from the open layers examples, and by looking at other folks’ maps and trying to duplicate and sometimes improving upon others functionality. We wanted a map that would be really interactive and would let users be able click on any feature and get information about it, and we wanted that information to be valuable and updated by the staff on campus that managed that information, for example we have accessibility information for the buildings around campus, and we want to allow the folks in Disability Services to be able to easily update the info.
GML is a XML standard for geographic data, it supports points, lines and polygon. OpenLayers, the javascript framework that renders the map in the browser, is unbelievably smart and can take the geometry of the feature, turn it into a Scalable Vector Graphic, and then overlay it on the map in the right place. Our GML file is created dynamically from the database. The query i use to gather the shape data is: SELECT astext(the_geom) as the_geom,gid FROM tble. there is also some text manipulation of the string produced by astext(the_geom) that is being done by php, but it is pretty minimal. you can directly access the values of the elements for each feature using javascript. So you could, and we did initially, store attribute data in the GML and then access it directly using javascript. We now decided to have as little information as possible in the GML, and then make an AJAX call to get the attributes from the database. This makes the GML smaller, and then in theory faster for OpenLayers to process, and it also makes the database query faster.
Politics
On Monday we are presenting to the Executive Officers of the University. Our bosses have been banned from the meeting, by their boss. so it will be just us. Two developers trying to enlighten those who make the decisions as to the wonders and potential of web based mapping. We have reworked our powerpoint to be less technical and more of a broad view of what this can do.
The potential of a tool like this is really limitless. Any spacial data that currently exists, and there is a lot of it, can be integrated into the map as an interactive layer. The part that takes the longest is gathering the data about each feature, but thanks to a back end interface making updates to map features can be done quickly and easily by non technical staff, by the people who really have a stake in the data.
The example we’ve used most commonly is that of Disability Services. Currently they have an access map that shows all of the features on campus that are pertinent to the accessibility of the campus. We want the folks who work in that office to have a way to edit attribute data for different features as it comes available to them. Say an elevator breaks in the Liberal Arts building. Instead of them handing it off to the IT staff and wait a couple of days for it to get posted, by which time the elevator may have already been fixed, they should be able to log in and quickly and easily update the info important to them and the students they are there to support.