How to Make a Fledermaus Scene and Movie


These instructions assume you are using the computer in Steve Reynolds' lab named "geowall".

Check d:\earth_data to see if the raw data files you want (topography and images) may already be there, if not, save them there when downloading. Use a subdirectory of d:\earth_data to identify the source of your data, so you can give appropriate credit on your finished project. Use (or create) an appropriate subdirectory of d:\Geowall\earth for the data files and movies you create.

1. Find data for your area of interest

Most sources of topographic data or orthorectified photos are incomplete or have problems such as holes or gaps in the files. So you may have to search around for the best data from multiple sources. Some good ones are:

Black and white high resolution orthophotos

  http://aria.arizona.edu/search/
    1 meter/pixel DOQQ, collection is incomplete
    Choose DOQQs under Maps, then lat/long.
    (I'm not linking directly to their page because they keep changing their URLs, which breaks links.)
    Search by lat/lon, Sensor DOQQ
    http://aria.arizona.edu/search/Result?wrs_row=35&wrs_path=-110&sensor=DOQQ&action=Search
      (row and path are actually lat and lon)
      returns list of IDs
      http://aria.arizona.edu/search/Preview?ID=14096
      http://aria.arizona.edu/search/Metadata?ID=14096
        tells pixel size, bits per pixel, center XY etc.
        all say Pixel Size 30 Pixel Units (no value)
        and "There are no restrictions on this data set."
      http://aria.arizona.edu/search/Download?action=Download&source=fullData&ID=14096
        prompts for email address
        files are made available as
        ftp://aria.arizona.edu/tmp/tmp/35110d33.hdr  (contains more metadata)
          says: HORIZONTAL_UNITS: METERS HORIZONTAL_RESOLUTION: 1.00000
          this is NOT required for loading the tif into GlobalMapper
        ftp://aria.arizona.edu/tmp//tmp/35110d33.tif
        directory ftp://aria.arizona.edu/tmp/tmp/ is not browsable
        files are apparently deleted after some time so you cannot just use
        ftp://aria.arizona.edu/tmp/tmp/ + FILENAME and download it
        35110 means lat=35 lon=-110

Black and white medium resolution photos

  http://glcfapp.umiacs.umd.edu:8080/esdi/search.jsp
    15 meter resolution
    Check ETM+
    Click the hand lens
    Click the map to zoom in to area of interest
    When close enough click the arrow-plus
    One by one click the images you want
    When all desired images are highlighted
    Click Preview and Download
    A directory listing will come up, choose the largest file
      p037r035_7p20000606_z12_nn80.tif.gz
        this is the 15m/pix image
        8 bits per pixel, gray
      p037r035_7t20000606_z12_nn10.tif.gz opened in GlobalMapper
        8 bits per pixel, gray, 30m/pix
    Save to d:\earth_data\esdi
    Global Mapper, File, Open data file(s)...
    Choose your image(s)
      They will come up diagonal with large black borders,
      this is OK, to fix use
    Tools, Control Center
    Select the file(s) you just downloaded / opened
    You can control-click more than one at once
      but then you cannot set transparent color
    Options, Auto-Clip Collar does not work
    So select only one image at a time
    Transparent, Set Transparent Color, Pal Idx 0, OK, OK

Color LANDSAT 1990/2000 images in MrSID format

  About 14.25 m/pix, but with possible compression artifacts of ~100m
  color seems unnatural / exaggerated
  https://zulu.ssc.nasa.gov/mrsid/mrsid.pl
  Interactive browse/zoom map to desired area
  Check Select Image then click chosen spot
  Download tar file such as
    https://zulu.ssc.nasa.gov/mrsid/bin/download_file.pl?client=etmpsmos/sid&image=N-12-35_2000.tar
    but if you try that URL directly it says "Please use the appropriate download mechanism... Thanks!"

Color thematic mapper images

  http://aria.arizona.edu/mrsid_server/bin/show_gif.pl?image=aztmmossub.sid
    Interactively navigate a thematic mapper color image
    You may be able to save a screenshot and manually align it

Topo data

  http://glcfapp.umiacs.umd.edu:8080/esdi/index.jsp
    30 meter/pixel, 1 meter vertical resolution
    data is likely to contain holes where the observation
      was shadowed by topography, e.g. cliffs or canyons
    downloads can be automated.
    Typical URL: ftp://ftp.glcf.umiacs.umd.edu/glcf/SRTM/Degree_Tiles/n037/SRTM_u01_n037w076/SRTM_u01_n037w076.tif.gz

  http://mapmart.com/DEM/DEM.htm
    10 meter/pixel, limited to 10 free downloads
    vertical units may be either feet or meters, 16 or 32 bits
    some files may have a nodata collar around the edges
    Be sure to scroll down to USGS SDTS Digital Elevation Models (DEMS)
    and look for High Detail - 10 and 30 Meter Seamless or 7 x 9 mile area 7.5 Minute.
    Choose Begin Search and navigate to area of interest.
    When you zoom in close enough a Begin Ordering
    button will appear near the top of the screen. Click desired quad(s).
    Checkmarks will appear on your quads and their names will show in a list.
    Check Out, fill out form, download
    Example download URL:
    http://mapmart.com/MapMartDownLoadArea/DEMSDTS24KMM91200/3703735.dem.sdts.tar.gz
    (Note that the "91200" in the URL is your Order Number.)

2. Mosaic orthoimages and elevation data with GlobalMapper

Start, Programs, Global Mapper, Global Mapper 5

File, Load Workspace if you have one already, otherwise File, Open Data File(s)....

NOTE: If Global Mapper says "Error writing data to file" while you are trying to READ a file, check if the file is in a compressed format, such as filename.gz. If so, you may be out of disk space for your temporary directory. For example, C:\Documents and Settings\USERNAME\Local Settings\Temp\GlobalMapper may be used to hold temporary uncompressed copies of the file(s) you are trying to open.

Zoom until the area of interest nearly fills the screen.

Choose Tools, Control Center. Right click on image(s) or elevation file(s) to control which are drawn first or last. Left click on image(s) or elevation file(s) then Options to adjust lighter, darker, transparency etc. until screen looks the way you want your final image to look. Blend Mode Overlay can look pretty good for a low resolution color image applied over a high resolution black and white image.

Anti-Alias Pixels (Interpolate) can improve the appearance of a low resolution input image that you intend to save at a higher resolution. For example, if you have a 15 meter per pixel color image you plan to blend into a 1 meter per pixel black and white image, try Anti-Alias on the color image. However, there is no point Anti-Aliasing the black and white image, unless your final output .tif is going to be saved at a resolution better than 1 meter per pixel.

For another way to apply lo-res color to hi-res black and white, try Photoshop 7, Open the black-and-white picture, in the next layer open the color picture. Select all, copy, paste over first image. From the Layers tab choose Color and adjust the transparency percent.

The Automatically Adjust Contrast checkbox can help bring out subtle details. (Note that this may take a LONG time, maybe a half hour for a single MrSid image, yet with little visible effect. Adjust Contrast is more useful for small black-and-white images that are too dark or too bland.)

Also consider brightening or otherwise tweaking the image at this point before saving your .TIF and exiting GlobalMapper.

Save and Export Photography

Tools, Control Center hide the elevation layer unless you WANT it visible in the photo.

When the image on the screen looks right, save it to avoid repeating all those calculations later. File, Export Raster and Elevation Data. Choose GeoTiff for the image. Choose 24 bit RGB if the image is color. On a GeoTiff do NOT change the pixel size; unless you WANT to lose resolution, e.g. because you are working on a large area and you need a smaller output file. (If you want to set the pixel size in meters, first go to Tools, Configure, Projection and set the Projection to UTM.) Generate TFW File does NOT seem to be necessary. Export Bounds, draw a box, note coords, adjust if desired, or simply choose to export everything on the screen. Enter file name .tif.

WARNING: Fledermaus DMagic may not be able to read large .tif files. I have not had consistent experiences with this limitation. Sometimes I can read a .tif as big as 285MB, and other times it won't even take a 176MB file. If you are anywhere near the limit, Fledermaus may start to read the file but then crash. Once it crashed with a 119MB tif but when restarted it accepted a 186MB tif it had rejected a moment before. So check the size of your file and if it is big, consider zooming in to a smaller area of study (to reduce the number of pixels in your .tif) or reduce the resolution. Sometimes I save several .tif files, one at 10 meters per pixel, another at 11, and 12, and so on, then later I load into Fledermaus the largest one it will accept. Make sure you use Export Bounds, Reset to Last Exported Bounds or something similar so that all your files cover the exact same region so your elevation data and your image will line up.

Export Elevation

NOTE: Your elevation layer must not be hidden (in Tools, Control Center) or you can't export it. However the photo layer can be plotted on top of the elevation so you may not see the elevation on your screen even though it is turned on.

File, Export Raster and Elevation Data Choose an elevation related export file type, surfer ASCII worked well. You may get an "Out of Memory" error when exporting a relatively large area. Sometimes closing all programs, restarting GlobalMapper, and re-exporting the same region will work. The resulting Surfer ASCII file has been as big as 521MB, although in other cases the biggest file that could be saved was 361MB while an attempt to save a file that would have been about 400MB failed. Alternately, you can change to a larger pixel size thereby generating fewer pixels and a smaller output file at the cost of lost detail.

Check sample spacing, it may NOT default to your pixel size. Export Bounds, Reset to Last Exported Bounds. Enter file name and appropriate suffix.

If you might need to do this again later

You can discard all the extra image information resulting in a workspace that opens faster next time, in case you need to repeat something. Tools, Control Center, remove the unneeded images. Load the .tif you just created and verify that it is the right area and correctly positioned on the screen. File, Save Workspace as, new file name *.gmw.

3. Load files into Fledermaus

NOTE: You MUST be connected to the network the entire time you are using Fledermaus, or it may suddenly interrupt what you are doing, possibly even losing your work, because it cannot renew the license. This is especially important when you are rendering a movie; it may take several hours and an interruption in your network connection could abort your unfinished movie.

Start, Programs, FledermausPro, DMagic

If the title bar does not already show the directory where you want to work, you MUST do one of: Project, New or Project, Open or Project, Recent. This is merely choosing a current directory so your files will appear in the Data Components list.

File, Import Surface, choose your elevation file. WARNING Windows may completely lock up on opening a 1.4MB DEM. I have had better luck with Surfer ASCII .grd format, using files as large as 361MB. Choose file type from list. If you saved a Surfer ASCII Grid and you import as Surfer Grid you can probably Scan for Information OK.

Scan for Information to make sure geo coordinates are OK. Convert and Save to new *.dtm.

Select the *.dtm in Data Components and use the [>] to activate.

Surface Shader

Shading seems to be mandatory, even if you don't want it. Yet it is not entirely obvious what this accomplishes. So now I just choose Surface Shader, Start rendering..., wait a moment, Save shade and Close. If you want to tinker with it, the next paragraphs describe what I learned before I stopped bothering with it.

There is an option to read your image .tif when making a shade file, yet if you skip this option the result seems the same. Moreover, several errors can occur when shading the .tif, so you're probably better off to just shade your .dtm.

With your .dtm activated (visible in the window) choose the Surface Shader button. Adjust sun direction and height as wanted. If the image is already shaded consider direct overhead light so that you don't introduce conflicting shadows? Or at least adjust sun height from 0.50 to maybe 0.30 so shadows will be shorter on dramatic topography. Try setting all shader parameters to 0, maybe you can get little to no artificial shadows.

WARNING: you may get a message "ERROR: Invalid image file". This MIGHT be a memory limit because it seems to fail more often with larger images, but not consistently.

Overlay Image: IT IS NOT NECESSARY TO choose your *.tif as the image to shade. You can just shade your .dtm instead. Either way, you have to shade something so choose Start rendering.... If you don't like the shaded image adjust parameters and render again, otherwise Save shade and Close.

You may get another error at the END of shade rendering, before you get a chance to save your shade, saying "DAMAGE: after Normal block". After this DMagic will close and you will have to start over. The cause of this error or how to avoid it is not yet clear. The problem seems to be related to the .tif because if you make a shade of the same area without the .tif (shade the elevation data) the message does not occur.

Assemble Fledermaus Objects

If Textured DTM is not accepting the *.tif the problem may really be that your elevation data is not correctly georeferenced. Try another elevation data format. Surfer ASCII Grid seems to work. If you still can't get Textured DTM to work try Sonar instead (no photo just topo data).

Height Object: your *.dtm produced from File, Import Surface. Geo-Ref Object and Shade Object should auto-fill, choose what you just created if they don't. Image File: choose your GeoTiff (for Textured DTM). Object Name: the default name is probably OK. Build Object and Close. Close DMagic.

You may get the message "Error reading in image file" followed by "Process Failed. Could not read image file." The cause is not obvious. This message has been seen with a 2.2GB GeoTiff file and also with a 176MB file but with a 283MB GeoTiff it worked one time yet it refused to take the same file later. Converting the GeoTiff to .jpg doesn't work either because it loses its geographic coordinates. Closing all other programs to free up memory didn't seem to help. There was well over a gigabyte of free disk when trying to read the 176MB file, so disk space shouldn't have been the problem either. Sometimes if DMagic refuses to read a file, simply exit and restart the program and it will accept the same file it rejected before.

Start, Programs, Fledermaus Pro, Fledermaus

File, Open Data Object, choose your new *.sd. You will probably need to adjust the vertical exaggeration. Use Controls, Data Sets to make the Exag control visible (if it isn't already) and normally set exaggeration to 1.

4. Make an MPG movie

NOTE: MPG movies are compressed and thus lose a lot of detail. QuickTime movies can be better, but the steps to make a QuickTime movie start the same. The extra steps will be discussed in the next section.

Comparison of Compressed MPG Movie vs. Uncompressed QuickTime Movie

MPG Format QuickTime Format
MPG Format QuickTime Format

Choose a Screen Resolution

Before you start, decide on the pixel size of your final movie. This is limited by the monitor on which the movie will be made, the monitor on which the movie will play, and by any "chrome" or other interface elements that may occupy part of the screen while the movie is being generated or playing. Also, in some cases MPEG movies must be an integer multiple of 16 pixels.

Here is a list of possible movie sizes that maintain the typical 4x3 aspect ratio and conform to the 16 pixel restriction:

Width 64 128 192 256 320 384 448 512 576 640 704 768 832 896 960 1024 1088 1152 1216 1280 1344 1408
Height 48 96 144 192 240 288 336 384 432 480 528 576 624 672 720 768 816 864 912 960 1008 1056

640x480 is the MovieClient default. Some presentation projectors can show 1024x768, while the resolution of your desktop monitor may be higher than that.

Prepare Fledermaus to Make a Movie

Size the Fledermaus display window to match your desired movie size (or as close as possible) -- if you record a flight path at 640x480 and then make a movie at 800x600 it will NOT create a more detailed version of the same view. Rather it will create the SAME detail with a wider field of view. Likewise if you make a 320x240 mini-movie it will NOT have the same field of view at half the resolution as the 640x480 version. Instead it will have the same resolution but only a small field of view.

You must save your Fledermaus file as a *.scene if you want to make a movie. While doing this, check High Resolution Texture if you also want to explore this image in GeoWall stereo. It also seems to help (for Geowall rendering) to shut off Auto and choose a Mesh Gap of 16 or so. File, Save Scene similar name but *.scene. NOTE: Sometimes these options may not appear even if the Controls, Data Sets box is active. It may help to save the .scene file and reopen it. Or not. You might have to just keep poking at it until it works.

Exploration, Split Screen Stereo does NOT seem to help for making a GeoWall movie: the render window is mono anyway.

Controls, Movie Controls... move box to a convenient position out of the way of the image. Also, use Controls, Data Sets to turn off this control box if you need more screen room.

If you have a previous movie flightpath EVEN FOR ANOTHER LOCATION / SIZE AREA it may work if you are trying to do generally the same thing, for example, zoom in to the center while rotating. File, Open Flightpath and try it (Play). If the flight is good but you want to adjust the time, you can do that in Step 2, below. However, the resulting flight may be "bumpy". It is better if you can have the desired time in your original flight path.

Otherwise, you will have to make your own flight path.

If your movie consists of zooming in to an object of interest, it may be best to start at the end. Get your feature nicely centered and zoomed to where you want the movie to end. Adjust tilt and rotation until your final position is just what you want. Then zoom back out and rotate to your desired starting position, start recording, and slowly zoom in to your pre-established center.

At this point you may want to switch from high to low resolution or even shut off the texture entirely. This will allow you to fly around faster while recording (but with the drawback that you can't see exactly what's going to show in the final movie). Reducing detail now will not affect your movie; it will be recorded in max resolution according to the kbps setting you choose (later).

Hit Record. Click the image so it thinks you are about to move. It should record a second or two: note the timer to the right. If you do nothing the timer will stop. It is not recording your pauses, so if you WANT a pause do a few meaningless mouse clicks. Navigate, pause and resume if needed, Stop when done. File, Save Flightpath *.fph

Start, Programs, FledermausPro, Movieclient. 3 new windows will open. In Step 1: Open Files browse for your *.scene and the *.fph flight path you just made. Click OK and it will load and start playing in the render window. (Allow some time for a big file to load.)

Step 2: Smooth Flightpath. If you did this already and you liked your smoothed flightpath, and you don't want to adjust the time, just use it as the Unsmoothed Flightpath and choose Dont Smooth to proceed to Step 3. Otherwise, try it first accepting all defaults, choose Smooth. Note that this will create a new flight path with "smooth" in the name. Your smoothed flightpath will play back in low resolution preview mode.

If the flight is too "bouncy" try setting Frame Skip much higher. For example if you have a Current Length of 1000 frames, you might want to set Frame Skip to 100. This means that of your original 1000 frames there will be 10 "control frames" used and the rest ignored. It will smooth your flight so that you pass through the 10 control frames but interpolate the flight between those control frames. Unfortunately, the interpolation may not be exactly what you expected. For example, if you are rotating from point A to point B, the interpolation may be a straight line from A to B instead of a semicircle. The end result is that it looks like you are constantly getting closer to and then farther from your target, then closer again.

If your flight ends with a screen that is blank or mostly one solid color you might want to chop it off the end of the final product. But it is not clear how to do this. Changing Current Length doesn't seem to help.

Set the New Length to the desired length of your movie, it will fly faster or slower accordingly.

Continue adjusting parameters until the flight looks good, then choose OK to proceed to step 3.

Step 3: Render Movie. Expect rendering to take 1 to 8 hours per minute of video, depending on screen resolution and the complexity of your scene file.

Before you start rendering

You can either keep the default Resolution of 640x480, or use the Customize button to set the Resolution according to the size you chose when recording your flight path, above.

If you set Antialiasing to 2, the render window will double in size. This means you can only make a movie half the dimensions of your monitor. However, this can eliminate the shimmering and flickering that appears when small (single-pixel) details are moving. If you still need to make a larger movie, and your monitor is not big enough, choose Render Magnification to make the movie window smaller again until it fits on your monitor. A good combination of options is to set both Render Magnification and Antialiasing to 2, which in many cases will still fit on your screen but make a more watchable movie.

WARNING: When Render Magnification and Antialiasing were set to different values, the resulting movie was hopelessly scrambled. Don't do that!

If you want to make a smaller file size, changing the Resolution does NOT work. Either choose a flight path with a shorter time, or adjust the Bitrate using the Customize button. Note however that cutting the Bitrate by 3/4 may NOT reduce the file size by 3/4. Perhaps there is a minimum bitrate (1150kbps?) and it will ignore a lower setting. On the other hand, an experiment with 9000kbps instead of the default 3000kbps made a file 3 times larger. (Note that bps is BITS per second, not bytes per second.)

Also a higher bps rate may NOT produce a better movie. The best movies seem to result from the default 3000kbps.

Once while rendering a 45 second movie and all other programs except DOS were closed it crashed Windows on about the 4th frame (had to reboot) so save all files and close all other programs before starting. Not sure what does or does not contribute to the crash; when reselecting a 30 second smoothed flightpath it worked.

Consider changing the Framerate (under the Customize... button) to 24 frames per second instead of the default 30. In some cases it seems this will still use every frame in your flight path, and will still render the same number of frames in your movie, but the movie will play slower. In other words, you get a longer movie for the same file size. In other cases it seems this discards 20% of the frames, and possibly interpolates the remaining frames. This needs to be explored further, for example by rendering the same flight path at 24FPS and 30FPS and comparing the resulting number of output frames, movie size, and playing time. Regardless, many PCs cannot keep up with a high resolution movie at 30 frames per second anyway, so a slower movie may actually end up looking better.

When ready to render choose OK and leave it alone for awhile. If you notice that the rendering is going horribly wrong you can interrupt it with the [X] to close the window. You will still have a partial *.mpg movie. However if the flight path seems to be bouncing back and forth a little this might not be a problem that shows up in the final movie. Let it ride.

When done, a prompt will appear "Movie rendered successfully." If this doesn't appear, either your movie is still rendering or something went wrong.

5. Make a QuickTime movie

A QuickTime movie can have better resolution at the cost of larger movie files. To begin, follow the steps for making an MPG movie (above) but save the frames as .tif files instead of (or in addition to) making an MPG movie. Create an empty subdirectory (AKA "folder") and save the frames there; they will need to be isolated from other files when you make the QuickTime movie, later. For consistency from one project to the next, the suggested directory name is "frame_size" where size is the resolution of your images, for example "1024x768". Do NOT include the image size in the file name itself. BEWARE that the .tif files can consume a gigabyte of disk space for every 10 seconds of your movie. (The actual QuickTime movie will only take a quarter of that.)

5a. Make a QuickTime movie using QuickTime Pro

QuickTime Pro does not seem to suffer from file size limitations as severe as those you may encounter in Adobe ImageReady.

Start, Programs, QuickTime, QuickTime Player. File, Open Image Sequence.... Browse to the directory containing your .tif files. WARNING: If your files are on a network drive, QuickTime may crash after loading them. Try copying them to a local disk first.

Select the first image. (You do NOT have to select them all.) After opening the image, QuickTime will prompt you to choose a Frame rate. You could match the Framerate you used in MovieClient, above, if you want both your .mpg movie and your QuickTime movie to play at the same speed, or choose a different Frame rate. 15 frames per second flickers just enough to be visible, but still maintains the illusion of motion. Slower computers may be able to keep up with a 10 frames per second movie with fewer glitches and pauses, but even without those jitters, 10 frames per second does not look like smooth motion. At 12 frames per second there is still a perceptible pause between each motion, but you might just get away with it if your movie is not flying very fast or changing very much from one frame to the next.

QuickTime will say "Importing Movie" while it reads the images, but it is not really making a movie yet. When it is done reading the .tif files, the first frame will appear in a new QuickTime window. Assuming it looks OK and you want to go ahead and make the movie, you have a couple ways to proceed from here.

The Quick Easy Way

NOTE: This method can produce enormous files that are not visibly superior to the "More Options" technique, below.

Choose File, Save As... then select Make movie self-contained. Note the required disk space and check that you have it available. Enter a filename, including the .mov suffix and Save. Allow about 10 minutes to save a one-minute 1024x768 movie that takes about 3.5GB of disk.

The More Options Way

Using options such as those described here, you can produce a high-quality movie yet use only about 1/3 the disk space of the quick easy method, above. File, Export.... Choose Export: Movie to QuickTime Movie

You can try other formats, of course, but while AVI (for example) produces much smaller files, when viewed in Windows Media Player there are large blocks or blobs consisting of but a single color. In other words, much detail is lost.

Choose Options.... The Movie Settings dialog box will open halfway off the screen; drag it to where you can use it. Under the Settings... button (which also opens half off screen) choose Animation from the top drop-down list then Depth: Thousands of Colors. (Some graphics boards run SIGNIFICANTLY slower with Millions of Colors.) Set Quality to Best and set the Frames per second (again). Choose OK then proceed with the Size button to Use custom size and enter your desired Width and Height.

Choose OK again when done setting Options, enter a filename, and Save.

5b. Make a QuickTime movie using Adobe ImageReady

Adobe ImageReady movies seem to be limited to about 500 frames or 20 seconds. You might prefer to use the QuickTime Pro method, described above. However this section is being kept in case some reason is found to use Adobe ImageReady instead.

Start, Programs, Adobe ImageReady 7.0. File, Import, Folder as Frames.... Navigate to the directory containing your *.tif files and choose OK. Allow several minutes for the files to load.

If you find that Adobe ImageReady limits you to less than 600 *.tif files, you may need to delete frames from the beginning or end of the movie, or every second frame etc. as necessary to reduce the total number of frames. (In one case a movie of 372 frames, each 800x600 resolution, worked but when the same movie was extended to 558 frames it failed. This was immediately after a reboot so there were no other programs competing for memory.)

File, Export Original... and choose the Quick Time Movie file type. Enter an appropriate name and Save. On the Compression Settings dialog choose Animation with Depth: Thousands of Colors. (Some graphics boards run SIGNIFICANTLY slower with Millions of Colors.) Set Quality to Best and OK.


Written by Marvin Simkin
Filename howto.html
Last updated September 8, 2006
Arizona State University Valid HTML 4.01!
Freedom to Choose ANY Browser