Compare with Previous | Blame | View Log
<html>
<head>
<title>forgottenislanderbot -- Documentation</title>
<style type="text/css">
body {font-family: Helvetica, Ariel, sans, sans-serif;}
.toc li {list-style:none;}
div.cmd {font-family:Courier New, Courior, Monospaced, Monospace; font-size: 14pt;text-indent:2em;background-color:#BBBBBB;}
.attn {background-color:#ff0000;}
.footer {color:#999999;text-align:center;}
</style>
</head>
<body>
<a name="0" />
<h1>forgottenislanderbot -- Documentation</h1>
<p>
forgottenislanderbot is a set of computer programs for
gathering data on Bell Aliant's <abbr title="Digital Subscriber Loop">DSL</abbr> high-speed internet
coverage on PEI by querying Bell Aliant's website, and
displayed the data on a virtual globe, like Google
Earth.
</p>
<hr />
<a name="1" />
<h2>1. Table of Contents</h2>
<div class="toc">
<ul>
<li>
<a href="#1">1. Table of contents</a>
</li>
<li>
<a href="#2">2. Overview</a>
</li>
<li>
<a href="#3">3. Installation</a>
</li>
<li>
<a href="#4">4. Use</a>
<ol>
<li>
<a href="#4.1">4.1. Using the command-line</a>
</li>
<li>
<a href="#4.2">4.2. Getting the civic-address database</a>
<ol>
<li>
<a href="#4.2.1">4.2.1. Downloading the raw data</a>
</li>
<li>
<a href="#4.2.2">4.2.2. Converting to a <abbr title="ForgottenIslanderBot">FIB</abbr> database</a>
</li>
</ol>
</li>
<li>
<a href="#4.3">4.3. Crawling for <abbr title="Digital Subscriber Loop">DSL</abbr> coverage</a>
</li>
<ol>
<li>
<a href="#4.3.1">4.3.1. Robot etiquette</a>
</li>
<li>
<a href="#4.3.2">4.3.2. Planning the crawling</a>
</li>
<li>
<a href="#4.3.3">4.3.3. Running the bot</a>
</li>
</ol>
</li>
<li>
<a href="#4.4">4.4. Generating the map</a>
<ol>
<li>
<a href="#4.4.1">4.4.1. Producing the <abbr title="Keyhole Markup Language">KML</abbr> file</a>
</li>
<li>
<a href="#4.4.2">4.4.2. Using the <abbr title="Keyhole Markup Language">KML</abbr> with Google Earth</a>
</li>
<li>
<a href="#4.4.3">4.4.3. Distributing the map</a>
</li>
</ol>
</li>
</ol>
</li>
<li>
<a href="#5">5. Licenses</a>
</li>
</ul>
</div>
<a href="#0">[ top ]</a>
<hr />
<a name="2" />
<h2>2. Overview</h2>
<p>
ForgottenIslanderBot (<abbr title="ForgottenIslanderBot">FIB</abbr>) was written in January 2010 after it
became apparent Bell Aliant was not expanding their <abbr title="Digital Subscriber Loop">DSL</abbr> coverage
across the whole of PEI, and would be offering their 3G modem as
an alternative. Due to numerous concerns about the 3G modems,
and vagueness surrounding the number of addresses <abbr title="Digital Subscriber Loop">DSL</abbr> would not
be available at, the author realized the need for a map of Bell
Aliant's <abbr title="Digital Subscriber Loop">DSL</abbr> coverage, and that such a map would be possible to make.
</p>
<p>
The bot uses the Check Availability tool on Bell Aliant's
website to find out whether addresses in the PEI Civic Address
Database are eligible for <abbr title="Digital Subscriber Loop">DSL</abbr>. This data is only as good as the
website's database, but may be better than any other map
available. To make a map, <abbr title="ForgottenIslanderBot">FIB</abbr> generates a <abbr title="Keyhole Markup Language">KML</abbr> overlay, which can
be displayed in virtual globe software, like Google Earth.
</p>
<p>
forgottenislanderbot is free, open-source software under the GNU
General Public License.
</p>
<a href="#0">[ top ]</a>
<hr />
<a name="3" />
<h2>3. Installation</h2>
<p>
<abbr title="ForgottenIslanderBot">FIB</abbr> is written in the
<a href="http://www.python.org/">Python programming language</a>.
To run <abbr title="ForgottenIslanderBot">FIB</abbr>,
you will need a computer with the Python software and a fast internet
connection which you can leave running overnight.
</p>
<p>
The Python <i>interpretor</i>, which is required to run <abbr title="ForgottenIslanderBot">FIB</abbr>, can
be downloaded for free from the internet. Python is available
for most recent operating systems. Forgottenislanderbot requires
Python version 2.5 or 2.6 -- it does not work with the newest
version, 3.1, yet. Python 2.6 can be downloaded from
<a href="http://www.python.org/download/releases/2.6.4/">
http://www.python.org/download/releases/2.6.4/</a>.
</p>
<p>
To display the map on a virtual globe, you will need virtual
globe software, such as <a href="http://earth.google.com/">Google Earth</a>
or <a href="http://worldwind.arc.nasa.gov/">NASA World Wind.</a>
Both of those require a recent computer with a mainstream
operating system, as they use 3D graphics and more processor
power and memory.<br />
Note that you do not need to use the <i>same</i> computer to run <abbr title="ForgottenIslanderBot">FIB</abbr> and
display the map.
</p>
<p>
<abbr title="ForgottenIslanderBot">FIB</abbr> can be installed in a folder on your computer, like
<nobr><b>C:\<abbr title="ForgottenIslanderBot">FIB</abbr>\</b></nobr> or <nobr><b>Documents/<abbr title="ForgottenIslanderBot">FIB</abbr>/</b></nobr>,
or it can be run from a folder on a USB drive. To install <abbr title="ForgottenIslanderBot">FIB</abbr>,
unzip the <abbr title="ForgottenIslanderBot">FIB</abbr> zip file into such a folder.
</p>
<a href="#0">[ top ]</a>
<hr />
<a name="4" />
<h2>4. Use</h2>
<a name="4.1" />
<h3>4.1. Using the command-line</h3>
<p>
<abbr title="ForgottenIslanderBot">FIB</abbr> is a <i>command-line program</i> -- it must be run and
controlled from the command line, also known as the command
prompt, terminal, MS-DOS prompt, xterm, virtual terminal, or
shell. Less-young users may recall MS-DOS, or
U<sub>NIX</sub>.<br />
Command-lines in modern operating systems differ; how to access
it, for a few modern OSs, is described below:
<dl>
<dt>Microsoft Windows 95/98<sub>, maybe also ME</sub></dt>
<dd>Start > Programs > Accessories > MS-DOS
Prompt</dd>
<dt>Microsoft Windows XP<sub>, maybe also NT/2000, maybe
Vista</sub><
<dd>Start > All Programs > Accessories >
Command Prompt</dd>
<dt>Apple Mac OS X</dt>
<dd>Finder > Applications > Utilities >
Terminal</dd>
<dt>Linux</dt>
<dd><i>Due to variation, I'll assume most Linux users know
where to find a terminal</i></dd>
</dl>
</p>
<p>
Because <abbr title="ForgottenIslanderBot">FIB</abbr> must be run by Python, on most OSs you'll need to
manually invoke it.
<ol>
<li>Go to your command-line;</li>
<li>Navigate to the folder <abbr title="ForgottenIslanderBot">FIB</abbr> is installed to.<br />
<b>cd \<abbr title="ForgottenIslanderBot">FIB</abbr>\</b> or <b>cd Documents/<abbr title="ForgottenIslanderBot">FIB</abbr>/</b> might work,
depending on where you installed it.</li>
<li>You need to know how to run Python. If it is
installed completely, and in your PATH, running
<div class="cmd">python --version</div> should not
produce an error message. If not, you can either add
Python to your PATH, or run Python with its full path,
for example <div class="cmd">"\Python25\python.exe"
--version</div></li>
<li>Once you can run Python, you can run <abbr title="ForgottenIslanderBot">FIB</abbr> with
commands like the following:
<div class="cmd"><nobr>python fib-dbutil.py database.sqlite --stats yyyy 1 n</nobr></div>
Instructions in this document are presented in this format;
however, if you have to invoke Python differently, you
will have to change the command as needed.
</li>
</ol>
</p>
<a name="4.2" />
<h3>4.2. Getting the civic-address database</h3>
<p>
The bot needs a list of civic addresses to look up on the website.
The PEI government offers the civic address database online,
with no apparent constraints on use. It also has
latitude/longitude coordinates for each address, which
greatly assist making the map.<br />
Bell Aliant's website seems to be using the same list,
as street addresses appear in exactly the same format as
is used by the provincial database. Also, Google Maps is
probably also using the provincial database, as the
coordinates it finds for a civic address are the same.
</p>
<a name="4.2.1" />
<h4>4.2.1. Downloading the raw data</h4>
<p>
The civic address database has to be downloaded and
converted to a sqlite database before the bot can use
it. To get the database, go to <a href="http://www.gov.pe.ca/civicaddress/download/index.php3">http://www.gov.pe.ca/civicaddress/download/index.php3</a>
and download whichever counties you need (which in most
cases will be all three):
<ol>
<li>Select a county in the drop-down box.</li>
<li>Click <i>Download all addresses in this
county</i>.</li>
<li>It will load a new page.</li>
<li>Make sure <i>Tab-delimited ASCII</i> is
selected as the Download Format.</li>
<li>Make sure <i>Street Number</i>, <i>Street
Name</i>, <i>Community Name</i>, <i>Apartment
Number</i>, <i>County</i>, <i>Latitude</i>,
<i>Longitude</i> are selected. <i>Police
Department</i>, <i>Fire Department</i>, and <i>Ambulance</i>
are unnecessary, but may be selected anyway.</li>
<li>Click <i>Download the Data</i>. You will probably be asked to
save the file; save it to the folder <abbr title="ForgottenIslanderBot">FIB</abbr> is
installed in as <b>[county].tsv</b>.</li>
<li>Repeat for additional counties.</li>
</ol>
</p>
<a name="4.2.2" />
<h4>4.2.2. Converting to a <abbr title="ForgottenIslanderBot">FIB</abbr> database</h4>
<p>
As downloaded, the civic address databases are in
<i>tab-separated-values</i> (TSV) format, where each field, e.g. civic
number, is separated from the next, e.g. street name, by a tab
character, with one address per line. <abbr title="ForgottenIslanderBot">FIB</abbr> works with
<i>sqlite</i> databases, which are files containing data in a
non-human-readable format, but which allow for easier searching,
organizing, and updating of the data.<br />
<abbr title="ForgottenIslanderBot">FIB</abbr> has a command to combine the three TSV files into one sqlite
file. Assuming the TSV files are <b>queens.tsv</b>,
<b>kings.tsv</b>, and <b>prince.tsv</b>, and they are in the
same folder as <abbr title="ForgottenIslanderBot">FIB</abbr>, run:
<nobr><div class="cmd">python fib-cadb2sql.py database.sqlite
queens.tsv kings.tsv prince.tsv</div>
</nobr>
It should output a file called <b>database.sqlite</b>. When the
bot is run, it will read civic addresses from this file, and
write to it whether <abbr title="Digital Subscriber Loop">DSL</abbr> is available at each address.
</p>
<a name="4.3" />
<h3>4.3. Crawling for <abbr title="Digital Subscriber Loop">DSL</abbr> coverage</h3>
<p>
The sqlite civic address database has an empty column for <abbr title="Digital Subscriber Loop">DSL</abbr>
availability. To fill it in is where the real <b>bot</b> part of
forgottenislanderbot comes in.
</p>
<a name="4.3.1" />
<h4>4.3.1. Robot etiquette</h4>
<p>
<abbr title="ForgottenIslanderBot">FIB</abbr> is in a class of computer programs known as <i>bots</i>,
<i>robots</i>, <i>web robots</i>, <i>webbots</i>, or <i>crawlers</i>.
These programs load web pages by themselves, without human
help -- they often load more web pages more quickly than
a human could, and this is usually what they're written for. A
subset of bots known as <i>spiders</i> follow web links from
site to site; <abbr title="ForgottenIslanderBot">FIB</abbr> is not one of these.
</p>
<p>
Because of robots' abilities to request a vast number of web
pages, they are sometimes viewed as a nuisance or a threat. Some
webmasters (if they are on top of things) might not want bots to
view certain pages on their website (like a <abbr title="Digital Subscriber Loop">DSL</abbr> availability
page), or they may not want bots at all. To let co-operative
bots know of such policies, a standard exists around a
<i>robots.txt</i> file, which can be put in the highest level of
a web server. Compliant bots will check for this file, and
interpret it to determine what they may view.
</p>
<p>
Although <abbr title="ForgottenIslanderBot">FIB</abbr> checks for a robots.txt, and to an extent will try
to check what it is permitted, if it is forbidden to access its
target, it will ask the operator for permission to override it,
and fetch the data anyway. Due to this override, <abbr title="ForgottenIslanderBot">FIB</abbr> was written
to view robots.txt as an inconvenient formality, and offload the
ethical burden of overriding to the operator from the
programmer.<br />
When I last checked, Bell Aliant did not have a robots.txt file.
If <abbr title="ForgottenIslanderBot">FIB</abbr> has much of an effect, they just might put one in. ;-)<br />
Furthermore, there was nothing in their website Terms of Service
forbidding bots specifically -- just DoS attacks.
</p>
<p>
A <i>Denial-of-Service (DoS)</i> attack is a hostile action where
a webserver is bombarded with numerous requests, from malicious
bots. At some point it will become overloaded and be unable to
serve any more pages -- hence the denial-of-service. Robot
operators and programmers must be careful to avoid appearing as
a DoS attack.<br />
Many web servers have monitoring software, which can sound
alarms if unusually large amounts of page requests are received.
Law-abiding bot operators should avoid generating alarming
amounts of internet traffic.
<p>
<abbr title="ForgottenIslanderBot">FIB</abbr> is <i>single-threaded</i> -- it requests web pages one at a
time -- so it is unlikely to appear as a DoS threat. (Most DoS
attackers use between twenty and several thousand requests per
second.) Furthermore, <abbr title="ForgottenIslanderBot">FIB</abbr> is easily configured to appear as less
of a threat:<dl>
<dt><b>interval</b>, or <b>delay</b>
</dt>
<dd>the time the bot pauses between loading each
address' <abbr title="Digital Subscriber Loop">DSL</abbr> status. Given to the bot in seconds, but
can be expressed as a decimal. The longer the interval,
the less threatening it appears to any monitoring
software.</dd>
<dt>
<b>sparsity</b>
</dt>
<dd>how many addresses to skip, and not check.
Technically, the sparsity is the minimum difference
between civic numbers of checked addresses, evaluated on
a per-road basis. To get every house, set to 1. To get
at least one house per road, and about every thousandth
house on the same road, set to 1000. For example, with a
sparsity of 10, it would check #500, if it was
the first house on the road, not #509, but also
#510, also #560, and, if the next was
#610, that too.</dd>
</dl>
In practice, a one-second delay is probably safe. The PEI civic
address database contains, at last check <nobr>68 023</nobr>
addresses (homes and businesses). At a low sparsity, say 40, the
bot will get about <nobr>10 000</nobr> addresses -- more than
enough for a detailed map. However, if you check all <nobr>68
023</nobr> addresses (with a sparsity of 1), not only will you
be able to produce maps with any density (see <a href="#4.4.1">
section 4.4.1</a> for details on this), but you will have a
precise number of how many addresses Bell Aliant's website says
can't get <abbr title="Digital Subscriber Loop">DSL</abbr>! With low sparsity, you'd have to estimate, which
isn't quite as accurate. The highest sparsity possible -- one
per road (which can be entered as 2781, or higher) -- without
excluding cities -- is still 5108 addresses.
As they are the first on a road, not the last, that might give a
lower count of no-<abbr title="Digital Subscriber Loop">DSL</abbr> addresses than actually exist.
</p>
<a name="4.3.2" />
<h4>4.3.2. Planning the crawling</h4>
<p>
Before running the bot, you should decide on the sparsity and
the delay. In choosing these, you should be aware how long it
will take to run. To find out, you must know a) how many
addresses your given sparsity will check, and b) how long of a
delay to allow, plus how long it takes to check an address.
</p>
<p>
One of the forgottenislanderbot tools is lets you see how many
addresses will be produced by a given sparsity. Assuming your
civic-address sqlite database is <b>database.sqlite</b>, and it
is in the same folder as <abbr title="ForgottenIslanderBot">FIB</abbr>, run:
<div class="cmd"><nobr>python fib-dbutil.py database.sqlite
--stats yyyy <i>sparsity</i>
<i>n</i>
</nobr>
</div>
<br />
where
<dl>
<dt>sparsity</dt>
<dd>is the sparsity, for example 40, and</dd>
<dt>n</dt>
<dd>is <b>n</b>, as in no, unless you wish to
specifically exclude Charlottetown and Summerside (on
the assumption high-speed is readily available), in
which case you use <b>y</b>.</dd>
</dl>
That command will produce output like the following:
<pre> ERROR : 0
EMPTY : 5109
NODSL : 0
BASIC : 0
ULTRA : 0
TOTAL : 5109</pre>
The second-to-top value, EMPTY, is the one to observe -- with that
sparsity (2780), 5109 addresses would be checked. As this example
shows an empty database, TOTAL can also be used as the guideline.
</p>
<p>
To estimate the time the bot will take to run, multiply the
number of addresses to be checked by the
time to check each address, which is the sum of the actual time
to load the page and the bot's delay. On a dial-up connection, the
page might take 12 seconds to load, on broadband, it might take
only <sup>1</sup>/<sub>20</sub>
<sup>th</sup> of a second,
although in practice it could easily take one second. For
example:<br />
<nobr>
<b>68 000 × ( <sup>1</sup>/<sub>2</sub> + 1 ) = 102 000
seconds</b>
</nobr>
<br />
Divide seconds by 3600 to find hours -- in this example,
28<sup>1</sup>/<sub>3</sub>.
</p>
<p>
<abbr title="ForgottenIslanderBot">FIB</abbr> stores <abbr title="Digital Subscriber Loop">DSL</abbr>-status values in its sqlite database, and will
not recheck an address if its status is already known. Because
of this, you can run it incompletely, getting more of the database
checked each time. Furthermore, you can run it at decreasing
sparsity -- for example, first with a sparsity of 1000, then 40,
then 10, then 1. The easiest way to stop <abbr title="ForgottenIslanderBot">FIB</abbr>, as described in <a href="#4.1">section 4.1</a>, is to press <b>Control-C</b> at the
command-line it's running in.
</p>
<a name="4.3.3" />
<h4>4.3.3. Running the bot</h4>
<p>
You can continue to use the computer <abbr title="ForgottenIslanderBot">FIB</abbr> runs on -- it doesn't
use very much memory or processor power, and, with its delay,
not much network bandwidth. If the computer crashes, a few
addresses will have been forgotten, but once the bot is started
again it will recheck them. Keep in mind, though, that the
computer <abbr title="ForgottenIslanderBot">FIB</abbr> is running on will need to be left on, and logged
in.
</p>
<p>
Once you have decided on a sparsity and delay, you can invoke
the bot. Assuming your sqlite database is <b>database.sqlite</b>
and it's in the same folder as <abbr title="ForgottenIslanderBot">FIB</abbr>, run:
<div class="cmd"><nobr>python fib-crawlbot.py database.sqlite 1 1 n</nobr>
</div>
where, respectively,
<dl>
<dt>1</dt>
<dd>is the sparsity (every house),</dd>
<dt>1</dt>
<dd>is the delay (one second), and</dd>
<dt>n</dt>
<dd>as in no, means not to skip the cities.</dd>
</dl>
After a few seconds, in which there is a small chance of it
asking you to override a robots.txt, it will begin testing
addresses. It will display the full address of each it checks,
with a rough progress bar of dots, until it displays
<b>1</b>,<b>2</b>, or <b>3</b>, which correspond to no <abbr title="Digital Subscriber Loop">DSL</abbr>, 1.5
Mbps <abbr title="Digital Subscriber Loop">DSL</abbr>, and 7 Mbps <abbr title="Digital Subscriber Loop">DSL</abbr>, respectively. It will then sleep for
the specified delay, and go on to the next address.<br />
You can (and, unless you're highly bored, <i>should</i>) leave
it until it finishes, at which point it will write <b>done</b>
and return the the command-line. If you tell it to get the full
database, come back later, and find it done, you could run the
same command again -- it will only re-get addresses it failed to
fetch the first time (it should display error messages when that
happens).
</p>
<p>
Once the bot has fetched the full database, you can confirm it
checked every address, and see the raw-number totals, with this
command (assuming your <b>database.sqlite</b> is in the same
folder as <abbr title="ForgottenIslanderBot">FIB</abbr>):
<div class="cmd"><nobr>python fib-dbutil.py database.sqlite
--stats yyyy 1 n</nobr>
</div>
That will display the complete totals. For an example of the
output table, see <a href="#4.3.2">section 4.3.2</a>. If every
address was successfully checked, ERROR and EMPTY will both be
0. You can see the results in the NO<abbr title="Digital Subscriber Loop">DSL</abbr>, BASIC, and ULTRA rows.
</p>
<a name="4.4" />
<h3>4.4. Generating the map</h3>
<p>
The <b>--stats</b> command provides the totals of each status,
but forgottenislanderbot was written with the intention of
making a map. The map is to be displayed in virtual globe
software, such as <span class="attn">
<a href="http://earth.google.com/">Google Earth</a> or
<a href="http://worldwind.arc.nasa.gov/">NASA World Wind.</a></span>
At this moment, it has only been tested with Google Earth, and
by default uses map icons provided by Google Earth. Although
Google Earth is better-known and has more detailed imagery, it
is copyrighted, with restrictions on use; I think NASA World
Wind's imagery are public-domain, with no constraints on
modification or redistribution.
</p>
<p>
To display <abbr title="Digital Subscriber Loop">DSL</abbr> coverage on a virtual globe, forgottenislanderbot
generates a <abbr title="Keyhole Markup Language">KML</abbr>
file, which contains numerous lat/long coordinates matched with
a coloured icon. Virtual globe software will display the
designated icon on the map at the specified lat/long
coordinates, producing a detailed overlay of <abbr title="Digital Subscriber Loop">DSL</abbr> coverage on
PEI. The <abbr title="Keyhole Markup Language">KML</abbr> file is mostly useless unless it is displayed on a
virtual globe, but because it does not contain Google's imagery,
it can be redistributed widely. The <abbr title="Keyhole Markup Language">KML</abbr> file is usually less
than 4MB in size. However, they can be compressed to under
200kB, in a <abbr title="Keyhole Markup language, Zipped">KMZ</abbr> file,
although <abbr title="ForgottenIslanderBot">FIB</abbr> doesn't support this yet.<br />
For privacy reasons, <abbr title="ForgottenIslanderBot">FIB</abbr> does not retain civic addresses in the
<abbr title="Keyhole Markup Language">KML</abbr> files it produces; this could be enabled, with an increase in
file size.
</p>
<a name="4.4.1" />
<h4>4.4.1. Producing the <abbr title="Keyhole Markup Language">KML</abbr> file</h4>
<p>
All <nobr>68 000</nobr> points are too much to expect a virtual
globe to display, due to memory and processing requirements. To
make lower-resolution maps, <abbr title="ForgottenIslanderBot">FIB</abbr> uses the same sparsity option
employed for crawling. The --stats command (see <a href="#4.3.2">section 4.3.2</a>) can be used to determine how
many points would be in the map. A sparsity of 40 produces a
rather cumbersome map.
</p>
<p>
Assuming your <b>database.sqlite</b> is in the same folder as
<abbr title="ForgottenIslanderBot">FIB</abbr>, and you wish to produce <b>map.<abbr title="Keyhole Markup Language">KML</abbr></b>, run:
<div class="cmd"><nobr>python fib-dbutil.py database.sqlite
--<abbr title="Keyhole Markup Language">KML</abbr> nyyy 40 n</nobr>
</div>
where
<dl>
<dt>nyyy</dt>
<dd>is the <i>status mask</i>--it sets which <abbr title="Digital Subscriber Loop">DSL</abbr>
statuses to display in the map. It comprises four
<b>y</b>/<b>n</b> yes/no values, each one defining
whether to display a particular <abbr title="Digital Subscriber Loop">DSL</abbr> status or not.
Respectively, the four statuses are unchecked, no <abbr title="Digital Subscriber Loop">DSL</abbr>,
1.5 Mbps <abbr title="Digital Subscriber Loop">DSL</abbr>, and 7 Mbps <abbr title="Digital Subscriber Loop">DSL</abbr>. In the example, unchecked
addresses will not be displayed. To display only addresses
without <abbr title="Digital Subscriber Loop">DSL</abbr> availability, use <b>nynn</b>. Similar terms
influence the --stats command; </dd>
<dt>40</dt>
<dd>is the sparsity; to get every address, use 1,
although that is inadvisable unless you're only
displaying no-<abbr title="Digital Subscriber Loop">DSL</abbr> addresses, with 'nynn'; and</dd>
<dt>n</dt>
<dd>is no, meaning not to skip the cities.</dd>
</dl>
</p>
<a name="4.4.2" />
<h4>4.4.2. Using the <abbr title="Keyhole Markup Language">KML</abbr> with Google Earth</h4>
<p>
Once you have generated your <abbr title="Keyhole Markup Language">KML</abbr> file, you have to load it onto
your virtual globe. In some operating systems, you can
double-click the <abbr title="Keyhole Markup Language">KML</abbr> file, or run it like a program from your
command line:
<div class="cmd"><nobr>map.<abbr title="Keyhole Markup Language">KML</abbr></nobr>
</div>
However, most likely you will load it from your virtual globe
program itself. In Google Earth, click the <i>File>Open...</i> menu
item, select the <abbr title="Keyhole Markup Language">KML</abbr> file (which will probably be in the
same folder as <abbr title="ForgottenIslanderBot">FIB</abbr>), and click <i>Open</i>. If you don't want to
do this each time you launch Google Earth, you can drag the
<i>forgottenislanderbot</i> item from the Temporary Places
branch of the sidebar to inside the My Places branch.<br />
The procedure for NASA World Wind is probably not much
different.
</p>
<p>
At present, unchecked addresses appear white,
no-<abbr title="Digital Subscriber Loop">DSL</abbr> addresses
appear yellow, 1.5 Mbps <abbr title="Digital Subscriber Loop">DSL</abbr>
addresses appear cyan, and 7 Mbps <abbr title="Digital Subscriber Loop">DSL</abbr>
addresses appear green.
</p>
<a name="4.4.3" />
<h4>4.4.3. Distributing the map</h4>
<p>
The <abbr title="Keyhole Markup Language">KML</abbr> file can be distributed through email,
websites/blogs, or individual ways of transfering
digital data, like CDs or USB drives. They can be
compressed in zip archive files, so long as it is
unzipped before use. Zipping does not help a <abbr title="Keyhole Markup language, Zipped">KMZ</abbr> file, though.<br />
Images from virtual globes can be saved, although you
may want to check the imagery licenses before
distributing them.
</p>
<a href="#0">[ top ]</a>
<hr />
<a name="5" />
<h2>5. Licenses</h2>
<h3>forgottenislanderbot</h3>
<p><pre>
forgottenislanderbot - makes a <abbr title="Digital Subscriber Loop">DSL</abbr> coverage map from Bell Aliant's website.
Copyright (c) 2010 Art Ortenburger
This program is free software; you can redistribute it and/or
modify it under the terms of the <a href="http://www.gnu.org/licenses/gpl.txt">GNU General Public License</a>
as published by the Free Software Foundation; either version 2
of the License, or any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
</pre></p>
<h3>fib.html -- this documentation</h3>
<p>
This document is licensed under the Creative Commons
Attribution-ShareAlike Canada license. See footer for details.
</p>
<h3>where to find licenses for data used by <abbr title="ForgottenIslanderBot">FIB</abbr></h3>
<p>
PEI government <a href="http://www.gov.pe.ca/civicaddress/">civic address databases</a> are not
specifically licensed on the government website, but
<ol>
<li>the <a href="http://www.gov.pe.ca/index.php3?number=1024403&lang=E">website copyright page</a> states that
information on the site may be reproduced
without further permission for non-commerical
use, and</li>
<li>the <a href="http://www.gov.pe.ca/civicaddress/">civic address main page</a> lists the civic
address database with the subheading "USE IN
YOUR OWN APPLICATIONS".</li>
</ol>
</p>
<p>
Users of Google Earth must comply with Google's license
agreements for Google Earth, which can be found on Google's
website. Google Earth imagery may be under a separate license.
</p>
<p>
NASA World Wind must be used in accordance with NASA
Open Source Agreement, which can be found on the NASA
World Wind website. NASA World Wind provides multiple
imagery layers. Some of these are in the public domain;
those which aren't are subject to a license agreement.
</p>
<p>
The Bell Aliant webpages are not retained by <abbr title="ForgottenIslanderBot">FIB</abbr>, and
the data stored is derived from the presence of various
phrases in the webpage, rather than an actual excerpt
from the website. Use of the Bell Aliant website is
governed by multiple agreements and terms of service,
which they administer on their website.
</p>
<a href="#0">[ top ]</a>
<hr />
<div class="footer">Copyright © 2010 Art Ortenburger.<br />
<a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/ca/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/2.5/ca/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/ca/">Creative Commons Licence</a>.</div>
</body>
</html>