<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.opendap.org/index.php?action=history&amp;feed=atom&amp;title=UserGuideChapter3</id>
	<title>UserGuideChapter3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://docs.opendap.org/index.php?action=history&amp;feed=atom&amp;title=UserGuideChapter3"/>
	<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=UserGuideChapter3&amp;action=history"/>
	<updated>2026-06-04T06:37:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://docs.opendap.org/index.php?title=UserGuideChapter3&amp;diff=1150&amp;oldid=prev</id>
		<title>Yuan: UserGuide1 moved to UserGuideChapter3</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=UserGuideChapter3&amp;diff=1150&amp;oldid=prev"/>
		<updated>2007-09-25T02:37:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php/UserGuide1&quot; class=&quot;mw-redirect&quot; title=&quot;UserGuide1&quot;&gt;UserGuide1&lt;/a&gt; moved to &lt;a href=&quot;/index.php/UserGuideChapter3&quot; title=&quot;UserGuideChapter3&quot;&gt;UserGuideChapter3&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:37, 25 September 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yuan</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=UserGuideChapter3&amp;diff=1121&amp;oldid=prev</id>
		<title>Yuan: New page: =The OPeNDAP Client=   There are many different data analysis packages in use. Some packages, such as MATLAB and IDL, are commercially available, but many more are written for a specialize...</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=UserGuideChapter3&amp;diff=1121&amp;oldid=prev"/>
		<updated>2007-09-24T21:44:26Z</updated>

		<summary type="html">&lt;p&gt;New page: =The OPeNDAP Client=   There are many different data analysis packages in use. Some packages, such as MATLAB and IDL, are commercially available, but many more are written for a specialize...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=The OPeNDAP Client=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are many different data analysis packages in use. Some packages, such&lt;br /&gt;
as MATLAB and IDL, are commercially available, but many more are written for&lt;br /&gt;
a specialized need or application. Many of these use one of the widely&lt;br /&gt;
available sets of scientific data access functions (called an {\em&lt;br /&gt;
&lt;br /&gt;
Application Program Interface}, or API)\indc{Application Program&lt;br /&gt;
&lt;br /&gt;
Interface|see{API}} such as NetCDF, JGOFS, or HDF. There is great variety&lt;br /&gt;
among all these programs, but one feature they share is that they all access&lt;br /&gt;
data through files containing that data\footnote{This is not true of some&lt;br /&gt;
&lt;br /&gt;
APIs, such as JGOFS.  That API, however, uses a data dictionary to allow&lt;br /&gt;
&lt;br /&gt;
the user to think that the data access is through files.}.  That is to say&lt;br /&gt;
that each program begins by identifying a file containing the data the user&lt;br /&gt;
wishes to examine or analyze.&lt;br /&gt;
&lt;br /&gt;
An OPeNDAP client  is simply a data&lt;br /&gt;
analysis application linked with the OPeNDAP libraries instead of the&lt;br /&gt;
standard data access API. Using this program, a user can look at files&lt;br /&gt;
containing data in the same way as was possible without the OPeNDAP&lt;br /&gt;
libraries.  However, by using these libraries, a user can also use a&lt;br /&gt;
URL (URL), instead&lt;br /&gt;
of a simple file name, to specify data located anywhere on the&lt;br /&gt;
Internet.  \Figureref{intro,fig,unlinked} and&lt;br /&gt;
[[Image:intro,fig,linked]] illustrate the operation of an&lt;br /&gt;
application program linked with a standard data access API, and the&lt;br /&gt;
same program linked with the OPeNDAP version of that API.&lt;br /&gt;
&lt;br /&gt;
An OPeNDAP client is then a data analysis application program&lt;br /&gt;
modified to become a web browser, somewhat like any other \ind{web&lt;br /&gt;
&lt;br /&gt;
browser} (NCSA Mosaic) with&lt;br /&gt;
which you may be familiar. A web browser can only display the data it&lt;br /&gt;
receives, however. What makes an OPeNDAP client different from&lt;br /&gt;
another web browser is that, unlike Netscape, once the data has been&lt;br /&gt;
received from an OPeNDAP server, the OPeNDAP client application can&lt;br /&gt;
compute with it.&lt;br /&gt;
&lt;br /&gt;
Like a web browser, an OPeNDAP client accepts a URL from a user, and&lt;br /&gt;
parses it to come up with a protocol, an address, and a message. (See&lt;br /&gt;
([http://www &amp;lt;cite&amp;gt; opd-client,url&amp;lt;/cite&amp;gt;]) for more information about URLs.) The&lt;br /&gt;
browser then sends a message to the address, directed to the server&lt;br /&gt;
who can service the desired protocol, asking for the information&lt;br /&gt;
specified in the remainder of the URL. Unlike a typical web browser, an OPeNDAP client will not know what to do with data returned for a web page&lt;br /&gt;
containing text and pictures, but an OPeNDAP server will return scientific&lt;br /&gt;
data that an OPeNDAP client can understand and process.&lt;br /&gt;
&lt;br /&gt;
Here is a simple example, using the &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;ncview&amp;lt;/font&amp;gt; program. This program&lt;br /&gt;
simply prints out the contents of a netCDF formatted data file,&lt;br /&gt;
specified on the command line, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; ncview fnocl.nc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using OPeNDAP, this same function may be executed from any computer connected to&lt;br /&gt;
the Internet by substituting a URL for the&lt;br /&gt;
filename above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; dncview http://dods.gso.uri.edu/cgi-bin/nc/data/fnocl.nc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(See [[Image:opd-client,fig,url-parts]] Aside from the fact that&lt;br /&gt;
the data is remote, and must be specified with a URL, the program will&lt;br /&gt;
seem to function in the same way it had with the simple netCDF library&lt;br /&gt;
(albeit somewhat more slowly due to having to make network connections&lt;br /&gt;
instead of local file operations). You can find &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;dncview&amp;lt;/font&amp;gt; (the&lt;br /&gt;
&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;ncview&amp;lt;/font&amp;gt; program linked with the OPeNDAP library) in the&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$DODS_ROOT/src/nc-dods/ncview&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
directory. Running the above command will produce the following output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
netcdf fnocl {&lt;br /&gt;
dimensions:&lt;br /&gt;
&lt;br /&gt;
time_a = 16&lt;br /&gt;
&lt;br /&gt;
lat = 17 ;&lt;br /&gt;
&lt;br /&gt;
lon = 21 ;&lt;br /&gt;
&lt;br /&gt;
time = 16 ;&lt;br /&gt;
&lt;br /&gt;
variables:&lt;br /&gt;
&lt;br /&gt;
long u(time_a, lat, ion) ;&lt;br /&gt;
&lt;br /&gt;
u:units = &amp;quot;meter per second&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
u:long_name = &amp;quot;Vector wind eastward component&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
u:missing_value = &amp;quot;-32767&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
u:scale_factor = &amp;quot;0.005&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
long v(time_a, lat, ion) ;&lt;br /&gt;
&lt;br /&gt;
v:units = &amp;quot;meter per second&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
v:long_name = &amp;quot;Vector wind northward component&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
v:missing_value = &amp;quot;-32767&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
v:scale_factor = &amp;quot;0.005&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
double lat(lat) ;&lt;br /&gt;
&lt;br /&gt;
lat:units = &amp;quot;degree North&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
double lon(lon) ;&lt;br /&gt;
&lt;br /&gt;
lon:units = &amp;quot;degree East&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
double time(time) ;&lt;br /&gt;
&lt;br /&gt;
time:units = &amp;quot;hours from base_time&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
// global attributes:&lt;br /&gt;
&lt;br /&gt;
:base_time = &amp;quot;88- 10-00:00:00&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
:title = &amp;quot;FNOC UV wind components&lt;br /&gt;
&lt;br /&gt;
from 1988- 10 to 1988- 13.&amp;quot; ;&lt;br /&gt;
data:&lt;br /&gt;
&lt;br /&gt;
u =&lt;br /&gt;
&lt;br /&gt;
-1728, -2449, -3099, -3585, -3254, -2406, -1252,&lt;br /&gt;
&lt;br /&gt;
662, 2483, 2910, 2819, 2946, 2745, 2734,&lt;br /&gt;
&lt;br /&gt;
2931, 2601, 2139, 1845, 1754, 1897, 1854, -1686,&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although there are packaged OPeNDAP browsing programs that a user can use&lt;br /&gt;
to look at data, the user can also construct his or her own.  Linking&lt;br /&gt;
an OPeNDAP API with an already existing program allows a user to create a&lt;br /&gt;
customized web browser that can access data available from any OPeNDAP&lt;br /&gt;
server connected to the Internet.&lt;br /&gt;
&lt;br /&gt;
The OPeNDAP APIs are designed to accurately mimic the behavior of several&lt;br /&gt;
different commonly used scientific data APIs.  As of this writing&lt;br /&gt;
(\today), the OPeNDAP API set includes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
|+&lt;br /&gt;
! Supported APIs !!  !! &lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039;  || &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;  || &amp;#039;&amp;#039;&amp;#039;Components&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|netCDF &lt;br /&gt;
|| Support for gridded data, such as satellite data,&lt;br /&gt;
interpolated ship station data, or current meter data. &lt;br /&gt;
|| Server and client.&lt;br /&gt;
|-&lt;br /&gt;
|JGOFS &lt;br /&gt;
|| Support for relational data, such as \class{Sequences}.&lt;br /&gt;
Created by the Joint Globar Ocean Flux Study (JGOFS) project for use&lt;br /&gt;
with oceanographic station data. &lt;br /&gt;
|| Server and client.&lt;br /&gt;
|-&lt;br /&gt;
|HDF &lt;br /&gt;
|| Support for gridded data.  Commonly used for astronomical&lt;br /&gt;
data and model data. &lt;br /&gt;
|| Server only.&lt;br /&gt;
|-&lt;br /&gt;
|DSP &lt;br /&gt;
|| Oceanographic and geophysical satellite data.  Provides&lt;br /&gt;
support for image processing.  Developed at the University of&lt;br /&gt;
Miami/RSMAS.  Primarily used for AVHRR and CZCS data. &lt;br /&gt;
|| Server only.&lt;br /&gt;
|-&lt;br /&gt;
|GRIB &lt;br /&gt;
|| Support for gridded binary data.  GRIB is the World&lt;br /&gt;
Meteorological Organization (WMO) format for the storage of weather&lt;br /&gt;
information and the exchange of weather product messages. &lt;br /&gt;
|| Server only, due in early 1999.&lt;br /&gt;
|-&lt;br /&gt;
|BUFR &lt;br /&gt;
|| The WMO&amp;#039;s standard set of codes for the transmission and&lt;br /&gt;
storage of meteorological data, using a compressed format with each&lt;br /&gt;
data value occupying the least number of bits necessary to contain&lt;br /&gt;
its range of values.  Suitable for meteorological observations made&lt;br /&gt;
from a single point or set of points. &lt;br /&gt;
|| Server only, due in early 1999.&lt;br /&gt;
|-&lt;br /&gt;
|Free\-Form &lt;br /&gt;
|| On-the-fly conversion of arbitrarily formatted data,  including&lt;br /&gt;
relational data and gridded data.  May be used for sequence data,&lt;br /&gt;
satellite data, model data, or any other data format  that can be&lt;br /&gt;
described in the flexible FreeForm format definition&lt;br /&gt;
language.  This server can be used to serve data stored in almost&lt;br /&gt;
all home-grown data formats. &lt;br /&gt;
|| Server only; no client required.&lt;br /&gt;
|-&lt;br /&gt;
| native OPeNDAP &lt;br /&gt;
|| The OPeNDAP class library may be used directly by a client program.  It&lt;br /&gt;
supports relational data, array data, gridded data, and&lt;br /&gt;
a flexible assortment of data types that can be combined to&lt;br /&gt;
c  accommodate most data models. &lt;br /&gt;
|| Client.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The API set is extensible, meaning that developers can use the OPeNDAP&lt;br /&gt;
software toolkit to write OPeNDAP-compliant versions of new APIs.  See&lt;br /&gt;
[http://www.opendap.org/support/docs.html/api/pguide-html/&amp;lt;cite&amp;gt;The OPeNDAP Programmer&amp;#039;s Guide&amp;lt;/cite&amp;gt;] for more information.&lt;br /&gt;
&lt;br /&gt;
The most important result of this architecture is that, just as the&lt;br /&gt;
use of the &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;dncview&amp;lt;/font&amp;gt; program above is identical to the original&lt;br /&gt;
&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;ncview&amp;lt;/font&amp;gt;, a user can use remote OPeNDAP data &amp;quot;and&amp;quot; continue to&lt;br /&gt;
use the same data analysis and display programs with which he or she&lt;br /&gt;
is familiar. Any program that uses one of the OPeNDAP-supported APIs may&lt;br /&gt;
be re-linked to use the OPeNDAP version of that API.  This creates an OPeNDAP&lt;br /&gt;
client. That and a connection to the Internet, are all that a&lt;br /&gt;
researcher requires to gain access to the available OPeNDAP data.&lt;br /&gt;
&lt;br /&gt;
==Configuring Programs to Use OPeNDAP==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Relinking an existing program with the OPeNDAP implementation of some&lt;br /&gt;
data API is a simple procedure.  Find the directory that contains the&lt;br /&gt;
source/object code of the program you want to re-link and modify the&lt;br /&gt;
makefile (typically called &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;Makefile&amp;lt;/font&amp;gt;) for the program so that the&lt;br /&gt;
OPeNDAP-compliant API library is used in place of the standard API&lt;br /&gt;
library.  (If you can&amp;#039;t find the libraries on your system, see&lt;br /&gt;
\appref{install}, or ask the system administrator.) These&lt;br /&gt;
libraries are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
; &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libdap++.a&amp;lt;/font&amp;gt; : Software common to all of the OPeNDAP-supported&lt;br /&gt;
&lt;br /&gt;
APIs.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPeNDAP also uses facilities from some standard libraries, and these must&lt;br /&gt;
also be included in the link to resolve all the symbols.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
; &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libwww.a&amp;lt;/font&amp;gt; : The World Wide Web library. \indc{World Wide&lt;br /&gt;
Web!library} This contains the functions used to communicate&lt;br /&gt;
between the OPeNDAP client and server.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libexpect.a&amp;lt;/font&amp;gt; : Functions from the &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;expect&amp;lt;/font&amp;gt;&lt;br /&gt;
library are used to communicate between&lt;br /&gt;
OPeNDAP client processes.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libtcl.a&amp;lt;/font&amp;gt; : Contains definitions necessary for the&lt;br /&gt;
&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;expect&amp;lt;/font&amp;gt; library.  The use of this library in the link is not&lt;br /&gt;
related to the use of Tcl by OPeNDAP clients.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libstdc++.a&amp;lt;/font&amp;gt; :&lt;br /&gt;
The GNU C++ class library (This is not necessary if using &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;g++&amp;lt;/font&amp;gt;&lt;br /&gt;
to re-link.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will also need to include the library containing the&lt;br /&gt;
OPeNDAP-compliant version of the API. The name of this library of course&lt;br /&gt;
depends on the API, but it is generally in the form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;lib&amp;quot;API&amp;lt;/font&amp;gt;-dods.a&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;quot;API&amp;quot; is an abbreviation indicating the API emulated by the&lt;br /&gt;
specified library.  For example, the OPeNDAP-compliant netCDF library is&lt;br /&gt;
called &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libnc-dods.a&amp;lt;/font&amp;gt; and the JGOFS version is &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libjg-dods.a&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===An Example Using netCDF===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;ncview&amp;lt;/font&amp;gt; program is a simple utility that prints the contents&lt;br /&gt;
of a netCDF-format file to standard output.  This section outlines the&lt;br /&gt;
process used to modify the &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;ncview&amp;lt;/font&amp;gt; makefile to link that program&lt;br /&gt;
with the OPeNDAP netCDF API, thereby turning &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;ncview&amp;lt;/font&amp;gt; into a&lt;br /&gt;
network-ready OPeNDAP client. The process of linking any other program&lt;br /&gt;
with the corresponding OPeNDAP library is entirely analogous to this one&lt;br /&gt;
and only requires the substitution of the program name and the&lt;br /&gt;
appropriate library.&lt;br /&gt;
&lt;br /&gt;
First the link flags were modified so that the library search path&lt;br /&gt;
would include the likely places to find the OPeNDAP libraries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LDFLAGS = -g -L$(DODS_ROOT)/lib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;DODS_ROOT&amp;lt;/font&amp;gt; is an environment variable that indicates the root&lt;br /&gt;
directory of the OPeNDAP installation, and in this manual is used as&lt;br /&gt;
shorthand for this directory.  It is typically called something like&lt;br /&gt;
&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;/usr/local/DODS&amp;lt;/font&amp;gt;. If you cannot find these directories on your&lt;br /&gt;
system, consult your system administrator, or refer to&lt;br /&gt;
\appref{install} for information about acquiring and installing&lt;br /&gt;
the OPeNDAP software.&lt;br /&gt;
&lt;br /&gt;
After the link flags were modified, the OPeNDAP libraries were added to the list&lt;br /&gt;
of libraries used. The order in which the libraries are listed is important.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIBS = -lnc-dods -ldap++ -lnc-dods -ldap++ -lwww -ltcl&lt;br /&gt;
&lt;br /&gt;
-lexpect -lz -lrx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Because OPeNDAP is implemented as a core set of classes contained in one&lt;br /&gt;
library (&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libdap++.a&amp;lt;/font&amp;gt;) and a set of specializations of those classes in a&lt;br /&gt;
second library (&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;libnc-dods.a&amp;lt;/font&amp;gt;), and because there is a circular&lt;br /&gt;
dependence between those two libraries, they must be included twice in the&lt;br /&gt;
linker command.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;g++&amp;lt;/font&amp;gt; was substituted for the link command.\footnote{It&lt;br /&gt;
is possible to use &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;gcc&amp;lt;/font&amp;gt;} instead of \lit{g++, but in that&lt;br /&gt;
case, &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;-lg++&amp;lt;/font&amp;gt; must be added to the end of the library list.}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Potential Problems===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a user links an existing a program to the OPeNDAP libraries, there are&lt;br /&gt;
several possible conditions that may cause problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Some programs use more than one API.&lt;br /&gt;
*Some programs access data using both API and UNIX system calls.&lt;br /&gt;
*Some programs use undocumented features of the APIs.&lt;br /&gt;
&lt;br /&gt;
If this is the case for a given program, there is generally no good solution&lt;br /&gt;
beside rewriting the software to conform to a strict usage of the data&lt;br /&gt;
reading parts of the given API. Of course if the problem is that the&lt;br /&gt;
program uses more than one API, you can try linking the program with an OPeNDAP-compliant version of the second API as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Re-linked programs can be very large.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
\indc{troubleshooting!size&lt;br /&gt;
&lt;br /&gt;
of executable}&lt;br /&gt;
The OPeNDAP libraries are large, and the &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;g++&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;www&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;expect&amp;lt;/font&amp;gt;, and &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;tcl&amp;lt;/font&amp;gt; libraries on which they are built are even&lt;br /&gt;
larger. This means that the executable version of a re-linked OPeNDAP&lt;br /&gt;
client can seem unreasonably obese. Much of the disk space is occupied&lt;br /&gt;
by symbol tables, which can be removed from the executable file with&lt;br /&gt;
the &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;strip&amp;lt;/font&amp;gt; utility.  In many cases, a user can recover a&lt;br /&gt;
substantial amount of disk space this way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;[CAUTION]{Without familiarity with the OPeNDAP software, it is best&lt;br /&gt;
only to strip the executable files. Stripping object files or&lt;br /&gt;
libraries might leave them in a useless condition for the linker.&lt;br /&gt;
Furthermore, stripping an executable file removes symbol names,&lt;br /&gt;
which may make diagnosing problems more difficult.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OPeNDAP libraries only affect the data &amp;#039;&amp;#039;reading&amp;#039;&amp;#039;  functionality&lt;br /&gt;
of the specified API. There are no OPeNDAP replacements for functions&lt;br /&gt;
like netCDF&amp;#039;s &amp;lt;font color=&amp;#039;green&amp;#039;&amp;gt;ncputrec()&amp;lt;/font&amp;gt;, that &amp;#039;&amp;#039;write&amp;#039;&amp;#039;  data to a disk file.&lt;br /&gt;
These functions are included in the OPeNDAP-compliant API library, but&lt;br /&gt;
they operate in a manner identical to the original (non-OPeNDAP)&lt;br /&gt;
versions, that is, they work on local files only, attempting to write&lt;br /&gt;
&amp;quot;over the network&amp;quot; will result in an error.  \indc{API!data output&lt;br /&gt;
&lt;br /&gt;
functions}&lt;br /&gt;
&lt;br /&gt;
==Writing New OPeNDAP Programs==&lt;br /&gt;
&lt;br /&gt;
The OPeNDAP software may also be used to write new programs. This may be&lt;br /&gt;
done either through one of the OPeNDAP-supported API libraries, such as&lt;br /&gt;
netCDF or JGOFS, or by using the OPeNDAP data access protocol directly.&lt;br /&gt;
There are advantages and disadvantages to each approach.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The biggest advantage of writing new code using an OPeNDAP-supported API&lt;br /&gt;
such as netCDF or JGOFS is that the programmer in question is probably&lt;br /&gt;
already familiar with the use of that API. Writing an OPeNDAP program using&lt;br /&gt;
an adapted API is not significantly different than writing the same&lt;br /&gt;
program with the original API. While writing this new program, it will be&lt;br /&gt;
useful to remember that the data the program uses will often be remote,&lt;br /&gt;
implying that data retrieval may not be instantaneous, and that&lt;br /&gt;
implementation of local caching to store requested data might be a good&lt;br /&gt;
idea, but other than that, the process is the same as writing a program&lt;br /&gt;
using the regular API.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is also possible to use the OPeNDAP data access protocol directly.&lt;br /&gt;
This is somewhat more involved than using one of the OPeNDAP-compliant&lt;br /&gt;
API libraries, and C++ is the only language supported for this.&lt;br /&gt;
However, this approach can provide substantially more efficient&lt;br /&gt;
programs. For further information about this approach, refer to the&lt;br /&gt;
technical information about the DAP in [http://www.opendap.org/support/docs.html/api/pguide-html/&amp;lt;cite&amp;gt;The OPeNDAP Programmer&amp;#039;s Guide&amp;lt;/cite&amp;gt;] .&lt;/div&gt;</summary>
		<author><name>Yuan</name></author>
	</entry>
</feed>