05.30.2009 19:02

Gardening

A bit more gardening today. I'm trying a few things that I've never grown before. This is Asparagus??? Bummer is that you are supposed to wait till next year to get any.



The herb section is coming along...



It's always nice to have company while you are out in the back yard...


Posted by Kurt | Permalink

05.30.2009 18:57

Contemplating a server

A view into one of CCOM's server rooms as Les does upgrades on one of our linux servers.


Posted by Kurt | Permalink

05.29.2009 11:11

Another UNH blogger - Maria Hunter

Maria Hunter now has a blog: hunter's gap


Posted by Kurt | Permalink

05.29.2009 09:33

Python regular expressions (regex) for NMEA strings

I've pretty much finished up my python code to parse the over 100 NMEA strings that the Healy sends me every hour. I've put the code online: healy-py-0.2.tar.bz2.

The whole parsing thing is just a bunch of python regular expressions. Here are the GGA position and ZDA timestamp messages:
gga_nmea_regex_str = r'''[$](?P<talker>[A-Z][A-Z])(?P<sentence>GGA),
(?P<time_utc>(?P<hour>\d\d)(?P<minute>\d\d)(?P<second>\d\d\.\d*))?,
(?P<lat>(?P<lat_deg>\d\d)(?P<lat_min>\d\d\.\d*))?,
(?P<lat_hemi>[NS])?,
(?P<lon>(?P<lon_deg>\d{3})(?P<lon_min>\d\d\.\d*))?,
(?P<lon_hemi>[EW])?,
(?P<gps_quality>\d+)?,
(?P<satellites>\d+)?,
(?P<hdop>\d+\.\d+)?,
(?P<antenna_height>[+-]?\d+\.\d+)?,
(?P<antenna_height_units>M)?,
(?P<geoidal_height>[+-]?\d+\.\d+)?,
(?P<geoidal_height_units>M)?,
(?P<differential_ref_station>[A-Z0-9.]*),
(?P<differential_age_sec>\d+)?
\*(?P<checksum>[0-9A-F][0-9A-F])'''

zda_nmea_regex_str = r'''[$!](?P<talker>[A-Z][A-Z])(?P<sentence>ZDA),
(?P<time_utc>(?P<hours>\d\d)(?P<minutes>\d\d)(?P<seconds>\d\d\.\d\d*))?,
(?P<day>\d\d)?,
(?P<month>\d\d)?,
(?P<year>\d{4})?,
(?P<zone_hrs>[+-]?(\d\d))?,
(?P<zone_min>(\d\d))?,?
\*(?P<checksum>[0-9A-F][0-9A-F])'''
I then build a dictionary of the compiled regular expressions.
regex_dict = {}
regex_dict['gga'] = re.compile(gga_nmea_regex_str, re.VERBOSE)
regex_dict['zda'] = re.compile(zda_nmea_regex_str, re.VERBOSE)
For each line, I walk the dictionary trying each regular expression until one works or I run out of messages to try.
matches = 0
misses = 0
for line in test_str.split('\n'):
    for key in regex_dict:
        match = regex_dict[key].search(line)
        if match is not None:
            break

    if match is None:
        print 'No_match_for_line: "%s"' % (line.strip(),)
        misses += 1
        continue

    match = match.groupdict()
    matches += 1
Having named fields in a regular expression feels like mixing Lex/Flex and YACC/Bison, but without having to do as much work. Using Kodos to build and test the regular expressions makes this pretty easy to construct.

Note that in my regular expressions, I have a lot of "?" characters for all of the fields that might be blank. The one thing that is missing right now is to validate the NMEA checksum.

Posted by Kurt | Permalink

05.29.2009 07:00

Cyber czar for computer security

Obama calling for better security for computers [yahoo news]
...
n Friday, Obama is expected to lay out broad goals for dealing with
cyber threats while depicting the U.S. as a digital nation that needs
to provide the education required to keep pace with technology and
attract and retain a cyber-savvy work force. He also is expected to
call for a new education campaign to raise public awareness of the
challenges and threats related to cyber security.
...
My first start suggestions:
  1. Require publication of source code and fund published code audits for critical infrastructure (I would include cell phones as critical infrastructure)
  2. Educate your users and developers
  3. Switch from Microsoft Windows to Linux (or sometimes MacOS)
  4. Stop using Microsoft Office and Outlook
  5. Ban MS Explorer as a browser
  6. Teach your users about encrypted connections - start using ssh and stop using ftp/telnet
  7. Don't blindly require security technology - e.g. whole disk encryption for machines without anything that needs protecting
  8. Build software that is easier to use makes users more aware of what is going on under the hood
  9. Don't make security so much of a pain that users bypass it
  10. Have IT groups help users find solutions rather than just punish users for trying to get their job done

Posted by Kurt | Permalink

05.27.2009 22:45

Roland and Colin in Antarctica

Roland and Colin have been in Antarctica for the last month and a half for a whale tagging cruise. Today is there last leg of the cruise.

Roland has posted some images of a Seal at Palmer station.



It's good to see some humor in the science team in their blog [duke.edu]:

... Not to mention all the pesky whales.  This is the main point
of why this job is total crap.  Last night; perfect example - we pull
up to station in the ice, do a 360 with the ship to clear a spot to
drop the rosette in the water and before we can even open the door we
hear explosions from outside.  All I want to do is get some work done.
Instead, I find myself running to the back deck we see them: 10, 12,
whales, less than 8' from the side of the ship, probably grateful to
have the clearing in the ice to play around in, and curious as well,
they spy hop so high they can see over the rail, the water is so clear
you see them coming from 50, 60' down.  Water surface area to whale
ratio is so low that odds are if I jump over the side of the ship, I
won't get wet.  They roll on their sides and stop, staring up at us,
and then the krill come.  It's raining rice krispies on a macro level,
poor wannabe shrimp are popping out of the ice free clearing
everywhere, ultimately screwed, as underneath them humpbacks circle
like sharks.  We wait for them to get bored; they don't. They come
closer, lunge higher, grow in numbers, stop and go and come back
immediately. Twenty minutes later - we've canceled science, due to
whales! How the heck am I supposed to get any work done? and there's
no regulation for it; I mean who do you call when whales pester you
constantly? ...

Posted by Kurt | Permalink

05.27.2009 18:43

Python visualization book

Beginning Python Visualization: Crafting Visual Transformation Scripts [Amazon.com] looks like my kind of book.

From the slashdot review:
...
The first example is using GPS data. By using Python one can extract
data from GPS receivers and enter it into the computer and manipulate
it to do what one wants including creating graphs and charts. In this
section he shows how to use CSV, comma separated values, as a most
useful file format. He shows show to extract data from real world GPS
devices and import it via serial ports and the PySerial module. It
would be easy for the reader to duplicate and extend this project.

The heart of the book is coverage of useful examples utilizing
MatPlotLib, NumPy and SciPy. These related tools are easy to use and
fully integrated with Python. MatPlotLib is for plotting data and
graphs, including interactive graphs and image files. NumPy is a
powerful math library comparable to commercial tools like MatLab, and
SciPy extends NumPy to for the sciences. Examples are numerous and
include signal analysis using Fourier transforms.
...

Posted by Kurt | Permalink

05.27.2009 17:57

Windows and grouchy com ports

We have a windows machine that is controlling a device via the serial port. On boot, the computer did not want to talk to the serial port. I couldn't figure out how to list what is owning the serial port (which is pretty easy on Linux...). Les and Will showed me what turned out to be the solution to getting the serial port back. But, I still don't know what the caused problem. Solution: Disable the com port. Wait 5 minutes for whatever it was give up and die. Enable the com port.

First I kill the app that wasn't working and fired up Hyperterm.



Disable the port and let it sit...



Enable the port...



And now everything works as expected. Looking at the task manager, there was no change in processes.

Update 2009-July-08: Thanks to Hector M. for pointing out the solution:
[T]he problem with the grouchy Windows PC serial port is due to
Windows scanning the serial ports on the PC on startup for serial mice
- notice the alarmed serial mouse present in your screenshot. There is
a Microsoft utility ComDisable (http://support.microsoft.com/kb/819036) 
which can be used to disable the scan on startup for selected ports. 

Posted by Kurt | Permalink

05.27.2009 14:02

Another TSS shift - Great South Channel

Shift in Boston Shipping Lanes May Reduce Risk of Endangered Whale Shipstrikes [NOAA News]

I had trouble understanding this press release. These two paragraphs are key:
...
Also on June 1, ships 300 gross tons and above will be asked to avoid
an area in the Great South Channel from April through July, when right
whales face the highest chance of being struck by ships. The channel
is a transit route for the endangered Northern Right Whale as it
migrates between summer and winter habitats.
...
In addition to the rerouting, the width of the north-south portion of
the lanes will narrow from a total of four miles to three miles. The
width of the east-west portion of the lanes was similarly narrowed in
2007.
...
Ranther than a picture of the whale tail, it would have been good to show the changes to the chart.


Posted by Kurt | Permalink

05.27.2009 13:17

Wolfram Alpha - maritime queries?

I have been trying to find maritime related queries for Wolfram Alpha, without much luck. The only really interesting one that has worked for me so far has been tide. What have you found that is related to working with ships?

http://www.wolframalpha.com/input/?i=tides+Portsmouth+NH



Coming soon?



Queries that I've received from others:

Posted by Kurt | Permalink

05.27.2009 11:30

Emergency Response Puerto Rico

Emergency responders to conduct oil spill PREP Exercise in Yabucoa, Puerto Rico [Coast Guard News]
San Juan, Puerto Rico - Coast Guard, federal and Puerto Rico
emergency responders in cooperation with Shell Trading (US) Company
and O'Brien's Oil Pollution Service are scheduled to conduct a joint
oil pollution response exercise at the Shell Chemical Yabucoa,
Inc. facilities from May 27 to 28.
...
Exercise participants will deploy response equipment to an oil spill
simulated at Shell Chemical Yabucoa, Inc. facilities from 8 a.m. to 4
p.m. both days. Residents should not be alarmed by the increased
presence of emergency responders and response equipment in the
Municipality of Yabucoa and the Shell Chemical Yabucoa,
Inc. facilities during the exercise.
...


It's clear that ERMA needs some help with ship names when zoomed ways out.


Posted by Kurt | Permalink

05.26.2009 15:17

USCG AIS Analytical Support

Just bumped into this solicitation from Dec 2008...

Analytical Support For Automatic Indentification System (AIS) Technologies - HSCG32-09-I-R00007 - Sources Sought
THIS IS NOT A SYNOPSIS TO ADVERTISE A SOLICITATION THAT IS READY FOR
RELEASE, rather the purpose of this Request for Information (RFI) is
to (a) determine whether there are a sufficient number of responsible
sources and (b) conduct market research regarding a potential
five-year, Cost Plus Fixed-Fee (CPFF) Indefinite Delivery Indefinite
Quantity (IDIQ) contract with the capability to provide Analytical
Support For Automatic Identification System (AIS) Technologies. It is
estimated that 14,500 of labor hours per year will be required. It is
anticipated that 90% of the work will be on-site in New London,
CT. With regard to this potential five-year contract, the U.S. Coast
Guard (USCG) Research and Development Center (R&DC) is seeking
information on companies that have the capability to detect, analyze,
and document Very High Frequency (VHF) Data Link (VDL) signal
performance and interference issues; perform analysis of AIS vessel
traffic data to support deepwater port risk assessments for proposed
Liquid Natural Gas (LNG) terminal sites; apply the National Marine
Electronics Association (NMEA) 0183 v4.00 Interface Standard for AIS
Shore Networks, including use of the NMEA 0183 v4.00 Transport
Annotate and Group (TAG) Block methodologies; administer SUSE
Enterprise Servers, Mail Servers, Mail List Servers, Web Servers, and
File Transfer Protocol (FTP) Servers; develop complex Mathworks MATLAB
models and solutions; to develop sophisticated automated analysis and
web publishing applications for unattended operation, without
intervention, running continuously 24x7, and the capability to develop
and implement real-time research network capabilities and network
applications for multiple platforms in both Java and C++ on Windows,
Linux, and Apple operating systems.

Of critical importance is the capability to understand the AIS
development and architecture in order to modify, and efficiently adapt
existing real-time AIS research network and it's components; to study
and publish AIS reception site performance and AIS reception network
operation; to perform real-time and historical AIS data processing and
analyses directly applicable to supporting vessel incident
investigations; to analyze and produce key data elements describing
vessel traffic patterns, including volume and frequency of voyages
near a deepwater port LNG site, and associated impact energy (kinetic
force generated in the event of an allision/collision) for all vessel
traffic, based upon 12 months of prerecorded AIS data; to administer
automated system and data backups across the USCG R&DC AIS research
network; to maintain an AIS multi-year data repository; to perform
System Operation Center functions for, and research client management
within, the R&DC AIS research network; to extend and operate the USCG
R&DC AIS VDL performance simulation; to extend the existing R&DC AIS
research network; and to support advanced AIS reception research.

Responses to this market research shall include the following: (1)
Describe company experience or history of the past three years and how
your experience was obtained or developed relevant to the scope of
this RFI including your business size status under NAICS Code 541511
(limit 3 pages); and (2) Describe the current capabilities that you
have to meet the tasking requirements described in this RFI (limit 3
pages). Again, the only purpose of this RFI is to collect market
research information. This announcement is not a research or
development project. The purpose of this announcement is NOT to
develop or evaluate potential new products, services or facilities, or
to improve existing facilities for the purpose of meeting the specific
performance capabilities or objectives. At this stage, the Government
has no intention to further develop or produce any equipment from the
information received. Information collected through this announcement
will be reviewed by individuals from the USCG. Responses to this
market survey shall be sent directly to: Helen.R.Nelson@uscg.mil with
a copy to Lee.A.Luft@uscg.mil. Only electronic responses will be
accepted and shall be submitted no later than 22 December 2008. NOTE:
Proposals are not being solicited at this time. PHONE CALLS MAY NOT BE
ACCEPTED, VOICEMAIL MESSAGES WILL NOT BE RETURNED, MAIL AND EMAILS
RECEIVED WILL NOT BE RESPONDED TO.

Posted by Kurt | Permalink

05.26.2009 14:46

noaadata 0.42

Just released noaadata 0.42. This is still research code and is far from perfect. noaadata-py-0.42.tar.bz2

Changes:
  • msg 5 ETA was backwards. Reported by ESR
  • msg 9 - Fixed speed over ground (SOG). Bug reported by Anders Olsson.
  • msg 18 - Added the new class b flags from ITU 1371-3
  • msg 19 - Maybe okay. Removed "broken" from the message name
  • msg 24 Handcoded for AIS Class B targets
  • aisutils/database.py - imprived track_lines, but really just moved to a simpler multi process setup
  • aisutils/uscg.py - trap bogus arrivals from a grouchy N-AIS station
  • ais-net-to-postgis - still not totally stable
  • ais_build_sqlite.py - added class b message, better bit checking for corrupted messages, "R" is also for receive
  • data/mmsi_prefix.sql: New: table of MMSI prefix country mapping
  • doc/esr-review.tx: New: ESR review of noaadata AIS
  • test_ais_server.py - New: feed AIS data from a file to anything that connects
  • nais_pg_realtime_reaper.py - New: cleanup for live web sites driven by postgis
  • nais2postgis.py - New: simpler replacement for feeding from an AIS server to postgis
  • aisutils/rmc.py - New

Posted by Kurt | Permalink

05.25.2009 21:53

linux whiptail console interface

Ever wonder what drives those menus that RPM and DEB packages use then you have to configure the system for a new package? I noticed a "whiptail" process running on a linux box... turns out this is the deal.
% whiptail --yesno "Is the sky blue?" 10 30
I'm sure this is a curses based system, but it sure is easier to use.


Posted by Kurt | Permalink

05.24.2009 23:12

Memorial weekend gardening

Memorial Day weekend is the traditional day to start planting in NH. I added a few more plants to the garden today. I may have lost one basil from the early planting that I did. Lots of seedlings are just getting started.



My neighbor gave me 4 caster bean seedlings. Very cool, but this year they are all green instead of red.



And a NH sunset to finish off the Sunday...


Posted by Kurt | Permalink

05.23.2009 20:46

GeoRSS feed validation

Looks like Feed Validator doesn't like my Healy Feed: Feed Validator - Healy GeoRSS... still work to do.


Posted by Kurt | Permalink

05.23.2009 18:57

Healy at the dock in Seattle

Today, the USCGS Healy is at the dock in Seattle. By request, I've altered the code to not show the image. At the same time, I added a link to the location so that if you click on the Longitude and a Latitude line, it takes you to the Google Maps location (sorry, no icon on the map). This is mostly for people using the GeoRSS feed in normal feed readers that don't know about the Geo part (e.g. NetNewsWire and Vienna). Which news readers understand GeoRSS?


Posted by Kurt | Permalink

05.22.2009 16:23

Nobeltec with a Class B transceiver

Today on the cruise to and from the Isle of Shoals, I got to check out the Class B install of the Cocheco from the perspective of seeing the Nauticast from the shipboard side. Ben gave a quick go of adding the AIS device's comm2 stream to Nobeltech and it just worked... actually, we thought it wasn't working and had to get underway. Later Emily pointed out that it was working just fine.





Nobeltec with AIS targets received via Class B transceiver:


Posted by Kurt | Permalink

05.22.2009 15:55

Isle of Shoals

This morning, a bunch of us headed out to the Isle of Shoals to look over sites for a tide station. We looked over some of the pilings left over from an old pier. I took a ton of pictures for documentation. Here is a small subset of the images. This first location is right near a National Ocean Service benchmark.







The seagulls are nesting out on the island. Two of us just missed an aerial bombardment.





The folks who work out on the island are getting ready for the students who are about to come out for summer session.






Posted by Kurt | Permalink

05.21.2009 14:55

data.gov

US Federal Government Launches Data.gov [slashdot] I did a quick search for NOAA in data.gov and came up with just this...


Posted by Kurt | Permalink

05.21.2009 14:45

A first RPM spec file

Now that I've got a CentOS 5.3 box that I'm trying to configure, it's time for me to finally learn how to create RPM packages for Linux. This has been on my "to do" list since 1999. I haven't mastered the topic, but at least I can place a file on the disk and have it be under control of the package manager. The RPM spec file is similar yet very different than fink info files. I used these references for figuring it out: The Fedora Project's Chapter 8. Creating RPMs: An Overview and GURULABS-RPM-LAB/GURULABS-RPM-GUIDE-v1.0.PDF (which sadly is a secured pdf).

For this project, I have a tar that consists just of "example/example.jar". This is a java archive as such can run on any platform, so you will see "noarch" below.

First I setup my build environment:
% echo "%_topdir /home/schwehr/rpmbuild" > .rpmmacros
% mkdir -p ~/rpmbuild/{BUILD,RPMS,S{OURCE,PEC,RPM}S}
I then put my tar in ~/rpmbuild/SOURCES and created ~/rpmbuild/SPECS to look like this:
Summary: Example rpm spec file
Name: example
Version: 1.3.0
Release: 1
License: Proprietary
Group: Applications/Network
Source: %{name}-%{version}.tar.bz2

URL: http://example.org
Buildroot: %{_tmppath}/%{name}-root

%description
Put a detailed description of the package here.

%prep
%setup -q

%build
echo "Nothing to build"

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/share/java
install -c -m 755 example.jar $RPM_BUILD_ROOT/usr/share/java/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/usr/share/java

%changelog
* Thu May 21 2009 Kurt Schwehr
Initial attempt at creating a rpm
Then I built and installed my rpm:
% rpmbuild -ba  --target noarch SPECS/example.spec
% sudo rpm -i RPMS/noarch/example-1.3.0-1.noarch.rpm
% ls /usr/share/java/example.jar 
/usr/share/java/example.jar
There is a lot more that I need to figure out. I'd like to install documentation files and setup a config file. I'd like to do this kind of thing for a number of data logging processes and have init scripts that kick off the appropriate daemons.

Posted by Kurt | Permalink

05.21.2009 13:25

USGS YoNav II

The USCG has it's own survey planning tool for Windows: YoNav

David Finlayson just put a newer version up here and mentioned it on the mbsystem mailing list:

http://walrus.wr.usgs.gov/ftp/pub/users/davidf/YoNavII/

We at the USGS Coastal and Marine Geology group have a fully
featured survey planning and operations tool called YoNav. It is
basically a drop in replacement for WinFrog or HyPack (well, the
survey-centric stuff).


I didn't have much time to try out the software, but here are some quick screen shots...




Posted by Kurt | Permalink

05.20.2009 14:56

MISLE / Marine Casualy and Polution Data for Researchers

In 2006, I got a CD of this data and created a Google Earth visualization of Marine Causualties from 2002 to 2006. This data has moved around on the USCG web sites and the URL's are generally really crazy. I finally found the latest home of this data from this page:

Summary: The Marine Casualty and Pollution Data files provide
details about marine casualty and pollution incidents investigated by
Coast Guard Offices throughout the United States. The database can be
used to analyze marine accidents and pollution incidents by a variety
of factors including vessel or facility type, injuries, fatalities,
pollutant details, location, and date. The data collection period
began in 1982 for marine casualties and 1973 for polluting incidents,
and is ongoing. Documentation includes entity and attribute
descriptions along with suggested solutions to general marine
pollution, vessel casualty, and personnel injury and death questions.


However, the data urls are a bit more manageable. Updated quarterly...

Posted by Kurt | Permalink

05.20.2009 13:44

Another Healy Science image, but with the Aloftcon Camera

Just because the healy is in an amazing bit of country...


Posted by Kurt | Permalink

05.19.2009 19:41

Healy ship track and science instrument reports

I'm just putting the finishing touches on my tool that parses the USCGC Healy science reports that come out hourly. I output a placemark for each report that summarizes what I think the key values are from the over 100 NMEA and SAMOS strings that are in each report. I have to handle the case where many of the instruments are off before I can release the live visualization. It will be nice for those of us back at CCOM this year to have more of a view into the cruise in real time.

Here are the instrument summaries. It's fun to see the multibeam transition from shallow water (70 meters) to deep water (3700 meters).



I've been experimenting with HSV color space and changes in track width based on what Ben Smith did for his VOS Google Earth visualization. I've managed to make some really horrible color schemes, but this one seems okay.



An example of one popup table:

USCGC HEALY (WAGB-20)
Healy Science Operations
Healy Cruise Track
Healy in Google Earth
Field Value Units
UTC time 2009-05-14 01:30:01 UTC
Longitude -166.315 W °
Latitude 53.542 N °
Heading 233.1821 ° True
Speed over ground 0.1 knots
Water Depth None m
Sea temp 7.972 ° C
Air Temp 11.09 ° C
Humidity 50.04 %
Presure 1009.02 millibar
Precipitation 0.12 mm

Posted by Kurt | Permalink

05.19.2009 11:03

GNUplot from sqlite3 using plot special-filename

I while back, I requested a new gnuplot feature: sql queries (e.g. sqlite) or some sort of more direct way to access sqlite without dropping temporary files on the disk. Juergen was kind enough to point me to "help plot special-filename" in gnuplot. It isn't totally what I was thinking, but it is definitely much better than what I had before. One drawback is that this is awefully hard to debug what is going wrong... turned out that I've got NULLs in my depth values when there is not CTR NMEA report from the Healy.
% gnuplot
gnuplot> set term x11 # Aquaterm doesn't allow rotation with splots
gnuplot> plot '< sqlite3 healy.db3 "SELECT lat,-depth FROM healy_summary WHERE depth IS NOT NULL;" | tr "|" "  "' t 'depth' 
gnuplot> splot '< sqlite3 healy.db3 "SELECT lon,lat,-depth FROM healy_summary WHERE depth IS NOT NULL;" | tr "|" "  "' t 'depth'


I was really hoping to just transition to matplotlib, but I keep coming back to gnuplot.

Posted by Kurt | Permalink

05.18.2009 22:30

AIS notices for whales schematic view

I've shown this in many a presentation, but here it is in my blog for referece... this is a very general / schematic view of how the system works. As always, see for a live web map and more details about the project.


Posted by Kurt | Permalink

05.18.2009 16:10

USCG's National Technical Means - another posibility

I realized that I left out one of the possible mechanisms for vessel tracking when I wrote about the USCG's "National Technical Means" for tracking ships. Perhaps this is what they meant...

America's Waterways Watch needs you [Coast Guard News]
...
America's Waterways Watch (AWW) is the U.S. Coast Guard's
"neighborhood watch" program, which enlists the support of the public
to report suspicious activity on or near the water. Those
participating in AWW serve as the eyes and ears of the Coast Guard and
its law enforcement partners, when agency resources are not present.
...
AWW

Posted by Kurt | Permalink

05.18.2009 11:18

mobile maritime applications - tides, charts, and AIS

Last week there was much discussion about iPhone applications for mariners and this morning, I saw Capt Ben Smith looking at tides on his Nokia N800. He was kind enough to let me share a photo of the device. This is a port of XTides called gtktide



Last week, the folks at NOAA said that in recent months, two thirds of their downloads of NOAA raster nautical charts (RNC) are coming from the iPhone via the iNavX application. This little application will even display AIS targets.



I encourage developers of mobile applications to look for more ideas in the maritime domain! Now we just need the iShipScience application that monitors all the science systems on UNOLS vessels.

And... the iPhone has a tide application too... TideGraph



And yet I don't have an iPhone, gPhone, or a Nokia N800... I'm definitely falling behind the leading edge.

Posted by Kurt | Permalink

05.18.2009 07:57

Garden started

This year's garden is just underway. I started last weekend, which is early for our area. It looks like I will have to tent things tonight as it is supposed to get down to 36F tonight.



Yeah, it's a weed in the grass, but they are still pretty.



Mystery bulbs... Thank you to who ever planted these in the yard:




Posted by Kurt | Permalink

05.17.2009 07:51

Fixing Adium AIM to work again

Yesterday, I was getting frustrated that AOL Instant Messanger (AIM) wasn't working in Adium (but Yahoo was okay). This is import for work. I tried switching back to iChat, but that was broken too. Monica set me straight... you have to change the port from 5190 to 80 in the Accounts Preferences.


Posted by Kurt | Permalink

05.16.2009 06:22

GAO Report on the sad state of the GPS satellite constellation

A large number of people were buzzing about this GOA report at Hydro. This may be a big boost manufacturers that produce GPS + GLONAS devices. GPS Accuracy Could Start Dropping In 2010 [slashdot]

I have also heard several peope worry about short periods of degraded service from the next suns spot maximum.

Global Positioning System: Significant Challenges in Sustaining and Upgrading Widely Used Capabilities [gao.gov]
The Global Positioning System (GPS), which provides positioning,
navigation, and timing data to users worldwide, has become essential
to U.S. national security and a key tool in an expanding array of
public service and commercial applications at home and abroad. The
United States provides GPS data free of charge. The Air Force, which
is responsible for GPS acquisition, is in the process of modernizing
GPS. In light of the importance of GPS, the modernization effort, and
international efforts to develop new systems, GAO was asked to
undertake a broad review of GPS. Specifically, GAO assessed progress
in (1) acquiring GPS satellites, (2) acquiring the ground control and
user equipment necessary to leverage GPS satellite capabilities, and
evaluated (3) coordination among federal agencies and other
organizations to ensure GPS missions can be accomplished. To carry out
this assessment, GAO's efforts included reviewing and analyzing
program documentation, conducting its own analysis of Air Force
satellite data, and interviewing key military and civilian officials.

It is uncertain whether the Air Force will be able to acquire new
satellites in time to maintain current GPS service without
interruption. If not, some military operations and some civilian users
could be adversely affected. (1) In recent years, the Air Force has
struggled to successfully build GPS satellites within cost and
schedule goals; it encountered significant technical problems that
still threaten its delivery schedule; and it struggled with a
different contractor. As a result, the current IIF satellite program
has overrun its original cost estimate by about $870 million and the
launch of its first satellite has been delayed to November
2009--almost 3 years late. (2) Further, while the Air Force is
structuring the new GPS IIIA program to prevent mistakes made on the
IIF program, the Air Force is aiming to deploy the next generation of
GPS satellites 3 years faster than the IIF satellites. GAO's analysis
found that this schedule is optimistic, given the program's late
start, past trends in space acquisitions, and challenges facing the
new contractor. Of particular concern is leadership for GPS
acquisition, as GAO and other studies have found the lack of a single
point of authority for space programs and frequent turnover in program
managers have hampered requirements setting, funding stability, and
resource allocation. (3) If the Air Force does not meet its schedule
goals for development of GPS IIIA satellites, there will be an
increased likelihood that in 2010, as old satellites begin to fail,
the overall GPS constellation will fall below the number of satellites
required to provide the level of GPS service that the U.S. government
commits to. Such a gap in capability could have wide-ranging impacts
on all GPS users, though there are measures the Air Force and others
can take to plan for and minimize these impacts. In addition to risks
facing the acquisition of new GPS satellites, the Air Force has not
been fully successful in synchronizing the acquisition and development
of the next generation of GPS satellites with the ground control and
user equipment, thereby delaying the ability of military users to
fully utilize new GPS satellite capabilities. Diffuse leadership has
been a contributing factor, given that there is no single authority
responsible for synchronizing all procurements and fielding related to
GPS, and funding has been diverted from ground programs to pay for
problems in the space segment. DOD and others involved in ensuring GPS
can serve communities beyond the military have taken prudent steps to
manage requirements and coordinate among the many organizations
involved with GPS. However, GAO identified challenges to ensuring
civilian requirements and ensuring GPS compatibility with other new,
potentially competing global space-based positioning, navigation, and
timing systems.

Posted by Kurt | Permalink

05.15.2009 17:12

Norfolk - end of US Hydro

US Hydro is over. But I have a couple more pictures to share. First, one of the dry docks:





Brian and I found one High Speed Craft (HSC) in our work on the last paper. It is surprising to see this military vessel broadcasting AIS in the clear when so many other vessels only use blue force encrypted AIS when in the harbor.

sqlite> SELECT userid,imonumber,callsign,name,shipandcargo, dimA+dimB AS width ,dimC+dimD AS length, destination FROM shipdata WHERE userid = 369970121 LIMIT 1;
UserID  IMOnumber       callsign        name    shipandcargo    width   length  destination
369970121       0       25MPB01 GUARDIAN                40      25      6       CHESAPEAKE LIGHT
I'm not sure if this is the Guardian or not. Anyone care to confirm or refute the identify of this beast?



Heading home...


Posted by Kurt | Permalink

05.15.2009 13:56

PostGIS book!

I consider this a must have book for the work that we do! I have been waiting for this book to come out for quite a while. I can't wait for it to finish.

PostGIS in Action by Regina O. Obe and Leo S. Hsu.


Posted by Kurt | Permalink

05.14.2009 08:49

Google Earth - Global ship tracks

David Sandwell has been working to produce a Google Earth visualization that shows the ship tracks (grey dots) that go into his global data products. With this kind of visualization in hand, ocean mappers can make sure to cover new ground when transiting areas. Be patient when viewing these kmz's. They pull quite a number of images from David's server. Some areas we as a community keep mapping over and over, while not far away, the sea floor could use some ensonification. In this image you can see the great coverage from the UNH Law of the Sea cruise and other near shore mapping projects on the US East Coast, where as out in the basin, the coverage gets quite sparse.



If you do a "Get Info" on the kmz, you will see this description text:

SEAFLOOR DEPTH - Colors and 500m contours represent variations in
seafloor depth (bathymetry).

These data provide the basis for 90% of the ocean data shown in Google
Earth. Small dots show the locations of the deeper water soundings. In
areas where no depth soundings are available, the seafloor depth is a
scaled version of gravity anomaly derived from satellite altimetry.
The scale factor varies with a number of parameters including sediment
thickness and mean ocean depth.

The details of this bathymetry prediction process are described in two
publications [Smith and Sandwell, 1994; Smith and Sandwell, 1997].

http://topex.ucsd.edu/sandwell/publications/59.pdf
http://topex.ucsd.edu/sandwell/publications/74.pdf

This particular data set includes 290 million, depth soundings
compiled and edited by investigators at SIO, NOAA, NGA, U.S. Navy, and
GEBCO.  The details are included in the following publication:

http://topex.ucsd.edu/sandwell/publications/124_MG_Becker.pdf

A more general description of seafloor bathymetry and plate tectonics
can be found at: http://topex.ucsd.edu/sandwell/publications/119.pdf

DATA ACCESS - Gridded data and raw soundings are available at:

http://topex.ucsd.edu/WWW_html/srtm30_plus.html

GRAPHICS - Generic Mapping Tools (GMT) was used to generate the
colored contour maps for direct input into Google Earth

http://gmt.soest.hawaii.edu/

MISSING DATA AND OTHER COMMENTS - If you see deep ocean data that are
missing from this compilations find errors or have other comments,
please contact David T. Sandwell, dsandwell@ucsd.edu.
Note that these visualizations show the results of some new code in GMT that outputs KML!

Posted by Kurt | Permalink

05.13.2009 17:49

More ship based lidar

Monica recently found LIDAR view of the Golden Gate Bridge by CSUMB. A while back, I used some great data from this same group to create my La Jolla 2004 demo.




Posted by Kurt | Permalink

05.13.2009 11:05

Cocheco's Class B transceiver in ERMA

The R/V Cocheco is heading out for work today and this is the first time that I've plotted up its position



Today is the Portsmouth response drill. The CRRC Test 1 vessel is heading up the Cocheco river as a part of those operations.


Posted by Kurt | Permalink

05.12.2009 12:08

bag2kmlbbox

I've just got my first draft of bag2kmlbbox working. This is a script that reads the metadata in a Bathymetric Attributed Grid and writes out the bounding box and puts the metadata in a placemark. Lots more to do, but it gets the idea across. Code and improvements will be forthcoming.


Posted by Kurt | Permalink

05.12.2009 05:52

Healy in Dutch Harbor

It looks like when the Healy is in port, it shuts off something that prevents GPS data from getting to the Aloftcon camera. No GPS data, but this is a great short of Dutch Harbor, AK.




Posted by Kurt | Permalink

05.11.2009 14:22

NOAA Swath Vessel

We had a good Chart of the Future meeting this morning with over 100 people attending. I'm now sitting in the Survey to Chart meeting (aka Ping to Chart).

This vessel will eventually be homeported in Newcastle, NH at the new UNH pier. NOAA Ship Ferdinand R. Hassler. Hopefully the ship builder will deliver the vessel to NOAA Dec 2009 or a few months after that.



For more photos, see: NOAA's SWATH Vessel - R/V Ferdinand R. Hassler, which will be homeported at the UNH research pier

Posted by Kurt | Permalink

05.10.2009 21:33

Photography from the plane and Norfolk

Back to using the point-and-shoot camera...










Posted by Kurt | Permalink

05.09.2009 22:40

Class B visualization

My first B geospatial visualization. This is CRRC Test 1 viewed in ERMA with multibeam bathymetry and OpenStreetMaps.


Posted by Kurt | Permalink

05.09.2009 17:34

Finally a Class B AIS Message 19 that decodes correctly

I logged 0.5 GB of AIS NMEA messages and finally got a working message 19 ('C') for a Class B device. Here is the luck winner:
% ./ais_msg_19.py -d '!AIVDM,1,1,,B,C5N3SRgPEnJGEBT>NhWAwwo862PaLELTBJ:V00000000S0D:R220,0*0B,x403022,b2003669952,1241898589'
b_pos_and_shipdata_broken:
        MessageID:         19
        RepeatIndicator:   0
        UserID:            367059850
        Spare:             0
        SOG:               8.7
        PositionAccuracy:  0
        longitude:         -88.8103916667
        latitude:          29.543695
        COG:               335.9
        TrueHeading:       511
        TimeStamp:         46
        Spare2:            0
        name:              CAPT.J.RIMES
        shipandcargo:      70
        dimA:              5
        dimB:              21
        dimC:              4
        dimD:              4
        fixtype:           1
        RAIM:              False
        DTE:               0
        Spare3:            0

Posted by Kurt | Permalink

05.09.2009 17:08

Class B static reports

I went ahead and coded msg 24 by hand. Not the most fun, but it's not too much work. I just created a fluffy database, so a single simple query will not be able to get a complete report for a Class B device. Here is decoding the two different types of the class b static data:
% ais_msg_24_handcoded.py -d '!AIVDM,1,1,,B,H5NHcTP<51@4TrM>10584@U<D00,2*77,x337805,b003669710,1241895000'
b_staticdata:
        MessageID:         24
        RepeatIndicator:   0
        UserID:            367405970
        partnum:            0
        name:   CAPTAIN`S PARADISE

% ais_msg_24_handcoded.py -d '!AIVDM,1,1,,B,HU2K5NTn13BijklG44oppk103210,0*06,s23294,d-114,T44.21624911,x731910,r13RSMT1,1241894986'
b_staticdata:
        MessageID:         24
        RepeatIndicator:   2
        UserID:            338085242
        partnum:            1
        shipandcargo: 54
        vendorid: ACR1234
        callsign: WDD7883
        dimA: 8
        dimB: 3
        dimC: 2
        dimD: 1
        mothership: 16789633
        spare: 0
I've started work on the database entries. My new network to database tool always deletes previous entries so that my database size doesn't get out of hand. Here is a query on the database. You can see that for most vessels I have both 0 (A) and 1 (B) reports:
% SELECT repeatindicator AS rpt, userid, partnum AS prt, name, \
    shipandcargo AS shp, callsign, vendorid AS vdr, 
    dima,dimb,dimc,dimd,mothership 
  FROM b_staticdata ORDER BY userid LIMIT 20;
 rpt |  userid   | prt |        name         | shp | callsign |   vdr   | dima | dimb | dimc | dimd | mothership 
=====+===========+=====+=====================+=====+==========+=========+======+======+======+======+============
   0 |   1126643 |   1 |                     |  52 | WDA4860  | SIMRAD  |   15 |   59 |   15 |   16 |   31699920
   0 |   1126643 |   0 | MIRANDA PAIGE       |     |          |         |      |      |      |      |           
   0 | 111287800 |   0 | ALLISON RACHEL      |     |          |         |      |      |      |      |           
   0 | 111287800 |   1 |                     |  52 | WDA4860  | SIMRAD  |   10 |   60 |   17 |   15 |   21218383
   0 | 111737900 |   0 | ELIZABETH BROWN     |     |          |         |      |      |      |      |           
   0 | 111737900 |   1 |                     |  52 | WDA4860  | SIMRAD  |   20 |   50 |   15 |   16 |   42148816
   0 | 118529631 |   0 | RALPH HENRY         |     |          |         |      |      |      |      |           
   0 | 118529631 |   1 |                     |  52 | WDA4860  | SIMRAD  |   10 |   60 |   15 |   16 |   21218256
   0 | 316001076 |   0 | DEEP COVE LIFEBOAT  |     |          |         |      |      |      |      |           
   0 | 316001076 |   1 |                     |  51 | AUX2     | ACR1234 |    3 |    5 |    1 |    1 |    6312001
   0 | 316007771 |   0 | MAXIMUS             |     |          |         |      |      |      |      |           
   0 | 316007771 |   1 |                     |   0 | BW       |         |    8 |    5 |    2 |    2 |   16797826
   0 | 316008039 |   1 |                     |  37 | VG9188   | ACR1234 |   10 |    8 |    3 |    3 |   21004483
   0 | 316008039 |   0 | WINESK              |     |          |         |      |      |      |      |           
   0 | 316008045 |   0 | EXPLORATHOR EXPRESS |     |          |         |      |      |      |      |           
   0 | 316008045 |   1 |                     |  60 |          | COMAR   |    7 |    7 |    2 |    2 |   14708866
   0 | 316008918 |   1 |                     |  36 | CFN5368  |         |    7 |    8 |    2 |    2 |   14712962
   0 | 316008918 |   0 | PAIKEA MIST         |     |          |         |      |      |      |      |           
   0 | 316009106 |   1 |                     |  37 | CFN4013  | COMAR   |   11 |    0 |    2 |    2 |   23068802
   0 | 316009106 |   0 | S/V SILVERHEELS III |     |          |         |      |      |      |      |           
It's pretty obvious that the requirement to have vendors do the install is still leading to invalid MMSI entries. Also, I thought from talking to people who are on the AIS working groups that the VendorID was supposed to be a unique ID for the actual device like an Ethernet MAC address. This clearly is not the case. Here are the VendorID's I've seen from about a 1/2 hour of traffic:
% SELECT DISTINCT(vendorid) FROM b_staticdata;
 vendorid 
========== 
 ACR1234
 COMAR
 DYACHT
 FEC0001
 NAVICO
 SHID@AE
 SHID@BA
 SHID@CG
 SHID@CH
 SIMRAD
 TRANSAS
 TRUEHDG
 WESTMAR
The fun part is with the SHID... values. I think that the '@' character is generally considered the end of string character. I'm doing a .rstrip(' @'), but probably I should do a find and truncate with the first '@', but the spec is unclear if the "@??" is actually a part of the vendor id.

It does look the mothership should generally be distinguishable from valid lengths. However, the first time someone puts in a really large DimA or a mothership value under 200000000, this will break. I just stored the values decode both ways.

Here is what the database table looks like:
ais=# \d b_staticdata
                                        Table "public.b_staticdata"
     Column      |            Type             |                         Modifiers                          
=================+=============================+============================================================
 key             | integer                     | not null default nextval('b_staticdata_key_seq'::regclass)
 messageid       | integer                     | 
 repeatindicator | integer                     | 
 userid          | integer                     | 
 partnum         | integer                     | 
 name            | character varying(20)       | 
 shipandcargo    | integer                     | 
 callsign        | character varying(7)        | 
 vendorid        | character varying(7)        | 
 dima            | integer                     | 
 dimb            | integer                     | 
 dimc            | integer                     | 
 dimd            | integer                     | 
 mothership      | integer                     | 
 spare           | integer                     | 
 cg_r            | character varying(15)       | 
 cg_sec          | integer                     | 
 cg_timestamp    | timestamp without time zone | 
Indexes:
    "b_staticdata_pkey" PRIMARY KEY, btree (key)

Posted by Kurt | Permalink

05.09.2009 15:30

Class B AIS design

Update 2009-08-24: Marcus Akesson wrote me about message 19. His explanation makes sense.
But, with Carrier Sense, msg 19 was not possible to use, since its
multislot. Instead, msg 24 was added.
...
So that's why You don't see any msg19, because they are not transmitted.
There is one exception, if a base station interrogates a ClassB device
and reserves timeslots for it, then it may transmit a msg19.
I'm working through decoding Class B AIS messages. I have to say that the design is not good. I have yet to find a valid message 19 (first letter 'C'). All the packets that I've recorded either have to many or two few bits. There must be a high probability that these two slot messages are getting stepped on, plus they are going out with only 2 watts from antennas that are much lower down compaired to large vessels with Class A.

Then comes message 24 - the Class B static message (starts with 'H'). It comes in two flavors, so I have to write a custom parser (the red square around the part number. And how am I supposed build the database to display these? I have the same complaint about how we built the met-hydro and area notice messages. We keep adding more layers of message addressing and these layers are not the same for all messages.

The VendorID as a string is not good. Ethernet has done a number only scheme for a very long time that works. Having a registry of assigned numbers is not a hard thing to do.

Also, notice that the dimension field can be either the size values or the mmsi of the "mother ship" and there is no flag to say which. I have to look at the values and decided which it is. The document gives no guidance to seeing which type it is and there may well be ambiguous values. They could have easily used one of the 6 spare bits to specify which value it is. I am going to assume that the dimension is the most common case and just hard code it in for now.



Looking at the Class A and B messages, I really wish that Class B just used the Class A messages with the same restrictions as it has now with transmit frequence and power.

Posted by Kurt | Permalink

05.08.2009 16:55

NTP for Mac OSX

A while back, I posted a comment on Mac OSX Hints to this post: 10.5: Back to My Mac fails to start due to incorrect time

Rob Griffiths has followed up with a Macworld blog post: How to use a pool of time servers. Rob is kind enough to credit me down at the bottom of the post:
Thanks to Mac OS X Hints reader Kurt Schwehr for today's tip.
Also, to restart ntp on the mac from the command line (at least in 10.5):
sudo launchctl stop org.ntp.ntpd
sudo launchctl start org.ntp.ntpd

Posted by Kurt | Permalink

05.08.2009 14:34

Spring - Tide station work

I had a few minutes between finishing my work and when the crew scouting tide stations got back, so I grabbed some pictures.








Posted by Kurt | Permalink

05.08.2009 10:52

Neptune LNG - Marine Mammals

Neptune LNG Seeks One-Year Authorization for Incidental "Harassment" of Marine Mammals [LNG Law Blog]

Federal Register E9-10681.pdf

NMFS received an application from Neptune LNG, L.L.C.  (Neptune)
for take of marine mammals, by Level B harassment, incidental to
construction and operation of an offshore liquefied natural gas (LNG)
facility in Massachusetts Bay. Under the Marine Mammal Protection Act
(MMPA), NMFS is requesting comments on its proposal to issue an
incidental harassment authorization (IHA) to Neptune to incidentally
take, by harassment, small numbers of several species of marine
mammals during construction and operations of the LNG facility for a
period of 1 year.
...

Posted by Kurt | Permalink

05.08.2009 10:38


Posted by Kurt | Permalink

05.08.2009 10:22

Talk today at UNH - Margaret Leinen

CCOM is hosting a very exciting talk today in Kingsbury N101 (not in the CCOM/Chase building):

SPECIAL SEMINAR ANNOUNCEMENT 

Friday, May 8th, 2009  3:00 p.m., Kingsbury N101

Geoengineering as a climate change mitigation strategy:
        What will we need to understand?

by

Dr. Margaret Leinen, 
Founder and Chief Scientist of The Climate Response Fund

All are welcome to attend
Sponsored by CCOM/JHC, NRESS and EOS

Dr. Margaret Leinen is the founder and Chief Scientist at The Climate
Response Fund, a nonprofit organization created to support efforts
that explore innovative solutions to the global climate crisis. While
there is a clear need for extensive reductions in greenhouse gas (GHG)
emissions, policymakers have found it extremely difficult to negotiate
meaningful agreements. The magnitude of the reductions needed
challenge our technical ability to replace fossil fuels, they
highlight the inequities between the developed and developing world,
and they will inevitably impact economies worldwide.

The Climate Response Fund is driven by the notion that policy
initiatives alone will not be sufficient for preventing the serious
consequences of climate change from becoming reality.  The scientific
community has identified a variety of alternative approaches that
involve large-scale intervention in the climate system, either through
removal of CO2 from the atmosphere or increased reflection of incoming
sunlight.  Despite their potential promise, investment in research in
these areas has been small and the controversial nature of such
efforts has led to resistance.  Nevertheless, given the magnitude of
the threat posed by climate change, there is a need to consider all
options available, with consideration that the risks of inaction will
be severe. In her presentation, Dr. Leinen will discuss a range of
possible geoengineering approaches that hold promise and share her
perspectives on the steps needed to carefully evaluate their relative
effects as well as the overall role of humans as architects of planet
Earth.

In addition to her efforts with The Climate Response Fund, Dr. Leinen
has been the Chief Science Officer at Climos, a company dedicated to
using natural processes to remove carbon from the atmosphere and
assist companies in reducing their carbon footprints and becoming
carbon neutral.  Prior to joining Climos, Dr. Leinen was the Director
of the Geosciences Directorate of the NSF from 2000 - 2006.  Before
serving at NSF, Dr. Leinen was Dean, Graduate School of Oceanography
and Vice Provost for Marine and Environmental Programs at the
University of Rhode Island. She was also Acting Dean, College of the
Environment and Life Sciences.  Leinen is a past president of The
Oceanography Society. She served on the Board of Governors of the
Joint Oceanographic Institutions, Inc., on the Board of Directors of
the Bermuda Biological Station for Research and on and the Ocean
Research Advisory Council. Leinen also served as the Vice Chair of the
International Geosphere-Biosphere Programme and on the Board on Global
Change of the National Research Council/National Academy of
Sciences. She is a Fellow of the American Association for the
Advancement of Science and the Geological Society of America.  She
currently serves on as a Board member for the National Ecological
Observatory Network.  She received a B.S. from the University of
Illinois; M.S. from Oregon State University, and a Ph.D. in Geological
Oceanography from the University of Rhode Island.

Posted by Kurt | Permalink

05.07.2009 15:17

Time zones with PostgreSQL

I haven't messed with anything other than straight UTC data in PostgreSQL before now. Here are some quick notes on using time zones. First, CURRENT_TIMESTAMP gives the time right now and defaults to the local time zone.
SELECT CURRENT_TIMESTAMP;
              now              
==============================
 2009-05-07 15:03:50.233617-04

SELECT CURRENT_TIMESTAMP(2) AT TIME ZONE 'UTC';
        timezone        
========================
 2009-05-07 19:04:30.23
Up until now, I have just been creating TIMESTAMP fields. Here is how to create a table with a timezone.
% CREATE TABLE foo (val INTEGER, ts TIMESTAMP WITH TIME ZONE DEFAULT now());
Now, add a line with everything set to the default values:
% INSERT INTO foo DEFAULT VALUES;
Now query the table in the default time zone and then ask for UTC.
% SELECT * FROM foo;
 val |              ts               
=====+===============================
     | 2009-05-07 15:06:46.585944-04

SELECT ts  AT TIME ZONE 'UTC' FROM foo;
          timezone          
============================
 2009-05-07 19:06:46.585944
See this page for more: Date/Time Functions and Operators

Posted by Kurt | Permalink

05.06.2009 13:26

AIS Class B message

Andy M and I conpleted two more Class B AIS installs this morning...
% ais_msg_18.py -d '!AIVDM,1,1,,A,B52KB8h006fu`Q6:g1McCwb5oP06,0*00'
positionb:
        MessageID:          18
        RepeatIndicator:    0
        UserID:             338088483
        Reserved1:          0
        SOG:                0
        PositionAccuracy:   0
        longitude:          -70.8111966
        latitude:           43.11555833
        COG:                171.6
        TrueHeading:        511
        TimeStamp:          20
        RegionalReserved:   0
        Spare:              0
        RAIM:               True
        CommStateSelector:  1
        CommState:          393222

Posted by Kurt | Permalink

05.06.2009 07:31

CentOS 5.3 and python

Minor critique on the latest CentOS:
% cat /etc/redhat-release
CentOS release 5.3 (Final)
I would hope for at python 2.5.x, but it is still back at 2.4:
% python
Python 2.4.3 (#1, Jan 21 2009, 01:11:33) 
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
There are a lot of things in 2.5 that make it much better than 2.4. The migration path from 2.4 to 2.5 was pretty easy (unlike getting from 2.5 to 2.6).

Posted by Kurt | Permalink

05.05.2009 17:03

NMEA 4.0 encoded AIS

I just got my first exposure to NMEA 4.0 encoded AIS data...
\g:1-2-5624421,n:2281618,s:r003669959,c:1241544037*78\!AIVDM,1,1,,A,15N9wuUPAJJnNGrGV>8J983:0D04,0*23
\g:2-2-5624421,n:2281619*20\$ARVSI,r003669959,,246060,9999,-053,0*3F
\g:1-3-60450,n:131065,s:r003669946,c:1241544038*4B\!AIVDM,2,1,9,A,55MwpAh000000000000<OCO;GF2222222222220k1H4,0*2C
\g:2-3-60450,n:131066*10\!AIVDM,2,2,9,A,3140002P00000000000000000000,2*79
\g:3-3-60450,n:131067*10\$ARVSI,r003669946,9,172038.11029899,1429,-091,0*2C

Posted by Kurt | Permalink

05.04.2009 17:44

Linux server that refuses to reboot

Update 5/5: Val found this that implies that a BIOS update would do it: Can't reboot "intel 5400" based systems with FEDORA 10. Les updated the BIOS and it still wouldn't reboot. We went to CentOS 5.3 and it reboots just fine. The other CCOM servers are pretty much all CentOS, so this will make it easier for them to admin.

We've got a linux server that I just upgraded to Ubuntu 9.04. When I rebooted, it hung then it tried to reboot the machine. I tried reinstalling the kernel and modutils. I also tried putting "blacklist iTCO_wdt" into /etc/modprobe.d/blacklist-watchdog to get rid of the watchdog as suggesting in bug report 218357. With no luck. This is an 8-core Xenon Dell Precision 5400 with Raid 1 on two .75 TB drives. I finally bit the bullet and tried making a custom kernel...
% sudo apt-get install wget git-core kernel-package fakeroot build-essential ncurses-dev
% wget http://www.pair.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.2.tar.bz2
% tar xf linux-2.6.29.2.tar.bz2
% cd linux-2.6.29.2
% make menuconfig
% make-kpkg clean
% CONCURRENCY_LEVEL=10 fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
# Wait a while
% cd ..
% sudo dpkg -i linux-image-2.6.29.2-custom_2.6.29.2-custom-10.00.Custom_i386.deb
% sudo dpkg -i linux-headers-2.6.29.2-custom_2.6.29.2-custom-10.00.Custom_i386.deb
And no luck... I built the kernel with CONFIG_X86_REBOOTFIXUPS set to yes, but that looks to not cover this machine.

We are going to try to wipe the machine and start over with centos 5.3

Note: the machine will happily power off with "shutdown -h now". It just won't restart correctly.

Posted by Kurt | Permalink

05.04.2009 13:11

proAIS software and the AIS-1000 from West Marine

I'm not too surprise to find that the AIS-1000 from West Marine is basically the same system as what I got with the ACR Nautcast AIS-300. The PCB boards look alike and check out the book sequence messages...

ACR Nauticast:

$PSRT,001,,,***************************************34
$PSRT,001,,,Software Bootloader Ver 3*6E
$PSRT,VER,,,,,,00001403*6E
$PSRT,001,,,Booting main application*13
$PSRT,001,,,--- -----------------------------------*14
$PSRT,001,,,--- Class B AIS Transponder*16
$PSRT,001,,,--- *39
$PSRT,001,,,--- SW Ver 10.0.7.0 Dec 11 2007 15:30:43 *03
$PSRT,001,,,--- FPGA Ver 5   HW Ver unknown    *4B
$PSRT,001,,,--- Power requirements: 12V 6W     *64
$PSRT,001,,,--- Compass safe distance: 0.5m *07
$PSRT,VER,,,00000000,007A16AC,00000005,0A000700 *48
$PSRT,001,,,--- Loading previous settings...    *45
$GPTXT,01,01,02,ANTSUPERV=AC SD OD PDoS SR*0B
$GPTXT,01,01,02,ANTSTATUS=OK*3B
And now the AIS-1000 from West Marine:
$PSRT,001,,,***************************************34
$PSRT,001,,,Software Bootloader Ver 4.0 *57
$PSRT,001,,,--- Jul  4 2008 13:17:18 ---*54
$PSRT,VER,,,,,,00001403*6E
$PSRT,001,,,Booting main application*13
$PSRT,001,,,--- -----------------------------------*14
$PSRT,001,,,--- Class B AIS Transponder *36
$PSRT,001,,,--- *39,rnrwais1,1241447967.05
$PSRT,001,,,--- SW Ver 10.0.9.0 Oct 17 2008 10:47:26 *18
$PSRT,001,,,--- FPGA Ver 5   HW Ver unknown    *4B
$PSRT,001,,,--- Power requirements: 12V 6W     *64
$PSRT,001,,,--- Compass safe distance: 0.5m *07
$PSRT,VER,,,00000000,006B46F5,00000005,0A000900 *30
$PSRT,001,,,--- Loading previous settings...    *45
$GPTXT,01,01,02,ANTSTATUS=OK*3B
$GPTXT,01,01,02,ANTSUPERV=AC SD OD PDoS SR*0B
It looks like they have slightly different versions of the onboard software, but otherwise, they are the same.

The Comar and West Marine transceivers both come with the proAIS software for setting up the static data on the devices. proAIS is much more obvious when it comes to working with Class B transponders. Again, the GPS was able to lock up on satellites outside of the building, but can't from my office window.






Posted by Kurt | Permalink

05.04.2009 10:20

AIS Class B installs continued

Today, I'm working with the West Marine AIS-1000 Class B transponder. 14 philips screws later... There is a TI DSP chip inside.... the Fixed-Point TMX320VC5502GZZ200.



Taking off the top reveals the connectors.



From Friday, here are the antennas being used on the Cocheco for AIS. In the yellow box is the starboard side marine VHF antenna that was already on the ship with the cabling aready run below. Andy M. added the dedicated GPS antenna shown in the red circle..



The cabling area before the AIS device was installed in the head.


Posted by Kurt | Permalink

05.01.2009 19:22

Configuring an ACR Nauticast Class B transceiver

Today I configured my first AIS Class B device. As a research institution, we got an exemption so that we can program our own class B devices. I believe we are still subject to the devices being locked to an MMSI after being set. Today, I was using an ACR Nauticast AIS-300 (P/N 2680). I first powered up the unconfigured unit and this is what the unit responds with:
$PSRT,001,,,***************************************34
$PSRT,001,,,Software Bootloader Ver 3*6E
$PSRT,VER,,,,,,00001403*6E
$PSRT,001,,,Booting main application*13
$PSRT,001,,,--- -----------------------------------*14
$PSRT,001,,,--- Class B AIS Transponder*16
$PSRT,001,,,--- *39
$PSRT,001,,,--- SW Ver 10.0.7.0 Dec 11 2007 15:30:43 *03
$PSRT,001,,,--- FPGA Ver 5   HW Ver unknown    *4B
$PSRT,001,,,--- Power requirements: 12V 6W     *64
$PSRT,001,,,--- Compass safe distance: 0.5m *07,
$PSRT,VER,,,00000000,007A16AC,00000005,0A000700 *48
$PSRT,001,,,--- Loading previous settings...    *45
$GPTXT,01,01,02,ANTSUPERV=AC SD OD PDoS SR*0B
$GPTXT,01,01,02,ANTSTATUS=OK*3B
!AIVDO,1,1,,,B0000003wk?8mP=18D3Q3wv5kP06,0*1A
!AIVDO,1,1,,,B0000003wk?8mP=18D3Q3wv5kP06,0*1A
$AITXT,01,01,61,MMSI not programmed - TX disabled*31
Unlike the Class A devices that I've used, this one will not transmit until it has an MMSI. I then fired up the windows LINK2AIS software from ACR and connected to the serial port.



The NMEA traffic changes to look like this:
$PSRT,010,,,000000000*04
$PSRT,LED,06*4E
$PSRT,ADC,0100,0002,0072,0069,0255,0209,0194*4F
$PSRT,SRM,01,02,@@@@@@@*0A
!AIVDO,1,1,,,B0000003wk?8mP=18D3Q3wv5kP06,0*1A
$AISSD,@@@@@@@,@@@@@@@@@@@@@@@@@@@@,000,000,00,00,1,AI*35
$PSRT,SRM,01,02,@@@@@@@*0A
$AIVSD,037,00.0,0000,@@@@@@@@@@@@@@@@@@@@,000000,00,00,00,00*4F
$PSRT,SNO,0008001196*50
$PSRT,SWF,10.0.7.0,05*76
$PSRT,010,,,000000000*04
I also got alarms that my antenna wasn't hooked up correctly.
$AIALR,000000,001,V,A,AIS: Tx malfunction*72
$AIALR,000000,002,V,A,AIS: Antenna VSWR fault*2A
$AIALR,000000,003,V,A,AIS: Rx channel 1 malfunction*24
$AIALR,000000,004,V,A,AIS: Rx channel 2 malfunction*20
$AIALR,000000,067,V,A,AIS: Noise threshold exceeded Chan A*4B
$AIALR,000000,068,V,A,AIS: Noise threshold exceeded Chan B*47
$AIALR,000000,057,V,A,AIS: 12v alarm*39
$AIALR,000000,058,V,A,AIS: 6v alarm*03
$AIALR,000000,076,V,A,AIS: 3V3 alarm*19
After a while, it also informed me that it had no position information. The GPS antenna was sitting in the window of my office, which is good enough for some GPS receivers, but not this one.
$AITXT,01,01,62,TX attempt failed (msg 18 no pos'n)*63
$AITXT,01,01,60,AIS: Internal GNSS not in use*28
I then started into the process of filling out the "static data" for the transceiver.



It's strange that in all these fields, the application allows you to type lower case letters, which AIS does not permit. It also lets you type sizes for A, B, C, and D with decimal places. Would be good to explain that only integer meter values are allowed. And meters should be made more obvious so that people know it's not feet.

For the call sign, I tried to leave it blank, but the interface forced one. I made a compromise of "NONE".



This is a research vessel, so I wasn't sure what class to make the vessel type. I also noticed that the interface restricted which types are allowed. I haven't read the whole class B specification to know if this is required. Also, the interface only shows 8 types at a time, making it hard to figure out what to do if you are not familar with the options.



Here is what I got when I set the static data:
$PSRT,003,,,1*07
$PSRT,010,,,369970120*05
$PSRT,003,,,1*07
$PSRT,003,,,1*07
$AISSD,NONE@@@,R/V COCHECO@@@@@@@@@,007,004,03,01,1,AI*3B
$PSRT,SRM,01,02,@@@@@@@*0A
$AIVSD,056,00.0,0000,@@@@@@@@@@@@@@@@@@@@,000000,00,00,00,00*48
$PSRT,SNO,0008001196*50
$PSRT,SWF,10.0.7.0,05*76
!AIVDO,1,1,,,B5Pm;j03wk?8mP=18D3Q3wv5sP06,0*6B
$PSRT,010,,,369970120*05
Having the GPS in my office, the unit only showed the yellow "warning" light. In the LINK2AIS interface, this shows up at the bottom:



In order to get more detailed information about what is wrong, you have to bring up the "Device Status" from the menu.



We then took the transceiver out to the ship and installed it (on the wall inside the head). One of the existing VHF antennas was not in use, so we only had to install another GPS antenna (for a count of 3). I then went over to my new receiver site in the new buildings at the UNH pier and found that I was receiving Class B position reports. The receiver isn't on the network yet, so it'll be a few days before I can show decoding a received class B packet.

Posted by Kurt | Permalink

05.01.2009 07:19

MS Access - Degrees and Decimal Minutes to Decimal Degrees

I have what I think is a fairly simple problem in MS-Access, yet I can't quite seem to figure out how to do this. In a geospatial database, I would like to just store decimal degrees in the database, but I would like to have a form that allows entering either decimal degrees or ... degrees and a separate decimal minutes (as you would see on a typical GPS display).

I'm a beginner at MS-Access and I've got the 2002 version. I tried setting an Expression in the Expression Builder, but it seems that Access is unhappy that LatDeg and LatMin are not in the database.

Can anyone help me out here? I've got a LiveJournal post for comments...


Posted by Kurt | Permalink