09.30.2005 22:45

Excellent article on fink at MacDevCenter



Update on the Cisco VPN for OSX at UCSD: Works pretty well but is annoying. It freaks in areas of spotty wireless. It demands to keep open it's window while running. How about a small icon on the menu bar like iChat or Adium? Also, it doens't show much about it's status.

Installing Fink on Mac OS X at MacDevCenter looks like a very nice article and tutorial on using Fink. I'm biased since it is very positive and I'm on the fink developer team (but definitely not a core member).
...
  The Fink project, which began in December 2000, has two goals. It
  aims to port all this software to Mac OS X ("porting") and makes it
  available for install ("packaging"). As a full package management
  system, based on Debian's apt system, it installs and uninstalls
  packages, tracks dependencies, installs the packages that are
  needed, updates the packages, etc. Bottom line: installing Unix
  software on Mac OS X with Fink is a piece of cake (most of the
  time). There can be challenges, however, and I'll cover those in a
  minute. 
...
I emailed Vince my fink recovery notes earlier today, so I figured I would post them here. Sometimes fink gets a little confused.
for fink, it you are having trouble, here are my quick debugging tips


* Make sure you have Xcode installed (e.g. you have /Developer) * Make sure you have Apples X11 installed * Install the X11SDK (Xcode leaves this out)

Then run this command:

sudo /sw/lib/fink/postinstall.pl

Then make sure /sw/etc/fink.conf has all of the trees. Using the unstable tree is critical...

Trees: local/main stable/main stable/crypto unstable/crypto unstable/main

Then in fink commander do Source->Selfupdate rsync ( do NOT use CVS... it is Slowwwww)

Then Source->ScanPackages

Also make sure that you don't have any stale buildlock files around. Open FinkCommander, and type lock in the search window. If you see any build locks and are not currently building anything, remove those packages.

That has fixed just about every problem I've run into... but never fear, you can always nuke /sw and reinstall fink from scratch. It doesn't take too long to get back up and running.
Also, if X11 refuses to install saying that it is alread there, you may need to delete the Receipt for X11. Be careful... just move the Folder to your desktop first and then try to reinstall it. On 10.3, receipts are in /Library/Receipts. BE CAREFUL with this!

Maybe Dru will have an update for what works with 10.4.

Posted by Kurt | Permalink

09.30.2005 11:16

PyGMT

I just cooked up a fink info file for PyGMT 0.3. However, I am unable to use it with the grd files that I have. I am not sure what is up at this point. I really could use this code right now for my thesis, so I will give with a whirl.

BTW, Aquaemacs is frustrating... only Esc for meta? That sucks.

ipython


In [5]: import PyGMT

In [6]: grdfile = open("foo.grd")

In [7]: grd = PyGMT.read_grid(grdfile) ====================================================================== exceptions.ValueError Traceback (most recent call last)

/Users/schwehr/Desktop/pygmt-test/<console>

/sw/lib/python2.4/site-packages/PyGMT/PyGMTgrid.py in read_grid(file) 200 # new grid 201 grid = Grid() --> 202 (grid.x_minmax,grid.y_minmax,grid.node_offset,grid.z_scale,grid .z_offset,grid.xunits,grid.yunits,grid.zunits,grid.title,grid.remark,grid.d ata) = gmtio.read(file) 203 204 return grid

/sw/lib/python2.4/site-packages/PyGMT/PyGMTgrid.py in __set_node_offset(sel f, val) 81 def __set_node_offset(self,val): 82 if val not in [0,1]: ---> 83 raise ValueError, 'Node_offset can be either 0 or 1.' 84 self.__node_offset = val 85 def __get_node_offset(self):

ValueError: Node_offset can be either 0 or 1.

Posted by Kurt | Permalink

09.30.2005 08:47

Skateboarding is not a crime

Portsmouth NH local news...

Using a skate board to getting from point a to b should not be a crime. Now skateboarding that destroys property is not cool. But just skateboarding around should not be outlawed. The other day, I saw an elderly man on his power chair driving in the middle of traffic. He was in the center lane mixing it up with cars. Now that is scary. He was going SLOWWWWWW.

City must end discrimination of skateboarders
  ...
  Police have not only been called on to periodically remove these
  young adults from Market Square, a city ordinance allows the
  ticketing of teens who use their skateboards - sometimes the only
  transportation they have - on city streets. 


It is disheartening, to say the least, to see a teen sitting in court with drunken drivers, drug addicts and wife beaters, just because he or she was apprehended skateboarding on town property. It is even more disheartening to see that same youngster have to plead with the court to get the skateboard - possibly the most valuable thing he or she owns - returned.

City officials justify keeping skateboarders off city streets as a safety issue, not only for pedestrians, but for the kids themselves. But older citizens racing around the city on bicycles, dodging through traffic, doesn't seem to concern those same officials. ...

Posted by Kurt | Permalink

09.29.2005 22:16

a2ps works well with python

A guy sitting next to me on the bus had a nice printout of a python program. He said that he used "a2ps -4", so here is a2ps segy.py -4 -g -o segy.py.ps; ps2pdf segy.py.ps; open segy.py.pdf after install in a2ps from fink.


Posted by Kurt | Permalink

09.29.2005 20:32

bunch of bookmarks



python-ldap definitely looks handy for those with ldap. See setting up shop

aquaemacs... trying to download it now.

I ran out of ITconversations to listen to on the bus today. odeo has more podcasts/audiocasts.

World Wind src

Another earth3d visualization program.

Drawing arbitrary GIS data on Google Maps

How To Build a Game In A Week From Scratch With No Budget - Using PyGame

aggdraw is a drawing library for PIL (Python Imaging Library).

Shed Skin - A Python-to-C++ Compiler - Sounds like what what was done eith JIT with Java.

Photon sounds like an interesting plugin for iPhoto (did not know that it had plugins) for working with blogs.

uber-converter - convert 3d formats. Lots of potential here.

MayaVI - PyVTK visualization. This is on my MUST CHECK OUT list.

Posted by Kurt | Permalink

09.29.2005 08:57

segy-py 0.26 release

Just released segy-py 0.26 with these changes:
  • segysqlgmt.py: added --trace-key to range which traces to use
  • segysqlgmt.py: CoordTransform can survive no ScalerCoord field
  • segywaterbottom.py: Added --time and --key. More usable!
  • segywaterbottom.py: Handle empty picks better
  • gnis.py: USGS place name database. Needs major help.
Looks like segystats.py escaped the changelog some how. That is a program that tries to summarize what is in the traces. It still needs lots of work before it is a nice program.

Posted by Kurt | Permalink

09.28.2005 22:34

UCSD VPN

Now that I am getting close to graduating, at Christie's prompting I gave the UCSD VPN a try. The docs are really confusing. For the mac, I started here:

http://www-ono.ucsd.edu/documentation/vpn/

Then registered on this page: https://www-no.ucsd.edu/cgi-bin/vpnsignup/signup.pl

Then click on the Mac 4.7 client link to get to this page: http://www-ono.ucsd.edu/documentation/vpn/mac/47/index.html



Under step 2, there is a little here link to download the Cisco VPN client software... http://www-ono.ucsd.edu/documentation/vpn/mac/47/UCSD-vpnclient-4.7.dmg

After downloading the VPN software, double click the dmg to open the Disk Image. Double click the "Cicso VPN Client.mpkg". Go through the install process, but do not eject this dmg!

Go into your applications folder and run the VPN client program. You now need to go through the import button twice. There are two setting that you need to pull in from the Profiles folder of the dmg:
  • allthruucsd.pcf
  • split.pcf
Now connect and use the allthruucsd mode... that means, make all your network traffic look like it is coming from UCSD.

You will need to enter your UCSD campus username and password. This is the same as your UCSD username and password for pop, ieng9, squirl mail, etc. NOT your IGPP username and password.

Keep the VPN running as long as you need services that require being at UCSD.

Posted by Kurt | Permalink

09.28.2005 18:27

parsing the USGS GNIS

The USGS has a handy name database full of all sorts of strange names. Here is some python code to quickly parse the name, type of name, and location. This first program (gnis.py) creates a sqlite database.
#!/usr/bin/env python


""" Parse the USGS Geophraphic Names Information System (GNIS) files and create an sqlite database.

http://geonames.usgs.gov/stategaz/ "
"" import sqlite import os import sys

if __name__ == "__main__": cx = sqlite.connect('ca-names.db') # No, this has nothing to do with DNS!! cu = cx.cursor() cu.execute('CREATE TABLE places ( name VARCHAR(60), type VARCHAR(50), lon REAL, lat REAL);') cx.commit() count = 0 for line in open ('CA_DECI.TXT','r').xreadlines(): count += 1 if count%500==0: print count fields = line.split('|') name = fields[2] if -1 != name.find("'"): print 'skipping ',name, continue type = fields[3] try: lon = float(fields[10]) lat = float(fields[9]) except ValueError: print "skipping line (bad lon/lat): ",line, continue insertStr = 'INSERT INTO places (name,type,lon,lat) VALUES (' insertStr += "'"+name+"'" insertStr += ", '"+type+"'" insertStr += ', '+str(lon) insertStr += ', '+str(lat) insertStr += ');' cu.execute (insertStr) cx.commit()

Then I wrote up something to search a bounding box and look for names that are of type cape, channel, or stream. The I only wanted rivers, so toss out a few extra names.
#!/usr/bin/env python
"""
Get the Eel River Basin names
"""
import sqlite
import os
import sys


if __name__ == "__main__": cx = sqlite.connect('ca-names.db') # No, this has nothing to do with DNS!! cu = cx.cursor() searchStr = 'SELECT lon,lat,name,type FROM places WHERE ' searchStr += ' lon > -125.0' searchStr += ' AND lon < -123.8' # -123.0' searchStr += ' AND lat > 40.1' # 39.5' searchStr += ' AND lat < 42' searchStr += ' AND (type="cape" OR type="channel" OR type="stream")' searchStr += ';' cu.execute(searchStr) for row in cu.fetchall(): if (-1 != row['name'].find('Stream')) or \ -1 != row['name'].find('Creek') or \ -1 != row['name'].find('Slough'): print 'skipping ', row['name'] continue print row['lon'], row['lat'], (' white "'+row['name']+'"')
If I then do a grep -v skipping on the results, I get a list like this:
-124.16139 40.80722  "Inner Reach"
-124.08222 41.54722  "Klamath River"
-124.01167 40.68833  "Little North Fork North Branch North Fork Elk River"
-124.11 41.02722  "Little River"
-124.09611 40.67333  "Little South Fork Elk River"
-124.09361 41.28  "Lookout Point"
-124.0175 41.02889  "Lower South Fork Little River"
-124.13389 40.94222  "Mad River"
-124.3525 40.305  "Mattole Point"
...
The final step is to import the points into the Fledermaus scene using Import->Points and setting the solid color button. Do a drape and all is well.

Posted by Kurt | Permalink

09.28.2005 18:10

slough

What a fun word! There are lots of them in the Eel River area. What fun :) slough n 1: necrotic tissue; a mortified or gangrenous part or mass [syn: {gangrene}, {sphacelus}] 2: a hollow filled with mud 3: a stagnant swamp (especially as part of a bayou) 4: any outer covering that can be shed or cast off (such as the cast-off skin of a snake) v : cast off hair, skin, horn, or feathers; "out dog sheds every Spring" [syn: {shed}, {molt}, {exuviate}, {moult}]

Posted by Kurt | Permalink

09.28.2005 14:48

Small pieces loosely joined



Check out John Udell's Google walking tour

The actual flash movie is >http://weblog.infoworld.com/udell/gems/gmap2_flash.html

Key phrases I heard today (podcasts while on the bus):
  • People add photo notes to a space / User annotation
  • Users add value - harness the user
  • Yahoo has an API now too
  • Remixable -- anti-fragility
  • eventful.com - http://api.evdb.com/
  • Windows is a bag of drivers. That's where it's power resides.

Posted by Kurt | Permalink

09.28.2005 13:08

python 2.4.2 released

Python 2.4.2 is out today. Looks like lots of little bug fixes over 2.4.1.

Posted by Kurt | Permalink

09.27.2005 17:48

sql query builder

I really need a simple SQL statement builder. I am ending up with some seriously ugly code deciding when to put AND's and WHERE's in a query! It would be nice to say something like this:
q = sqlselect()
q.fields(['name','address','occupation'])
q.where('age>200')
q.where('weight<50')
q.limit(10)
q.from('strangePeople')
q.close()
print q


SELECT name,address,occupation FROM strangePeople \ WHERE age>200 AND weight<50 LIMIT 10;
instead of this mess...
#!/usr/bin/env python


def buildFledermausLines(cx, options):

cu = cx.cursor()

searchStr = "SELECT fileKey,x,y FROM segyTrace "

if (None != options.minFileKey) or (None != options.maxFileKey) \ or (None != options.traceRangeMin) or (None != options.traceRangeMax): searchStr += ' WHERE'

if (None != options.minFileKey): searchStr += ' fileKey>='+str(options.minFileKey) if (None != options.minFileKey) and (None != options.maxFileKey): searchStr += ' and' if (None != options.maxFileKey): searchStr += ' fileKey<='+str(options.maxFileKey)

if (None != options.maxFileKey) and (None != options.minFileKey): searchStr += ' AND ' if (None != options.traceRangeMin): searchStr += ' '+options.traceKey+'<='+str(options.traceRangeMin) if (None != options.maxFileKey) and (None != options.minFileKey) \ and (None != options.traceRangeMin): searchStr += ' AND ' if (None != options.traceRangeMax): searchStr += ' AND '+options.traceKey+'<='+str(options.traceRangeMax)

searchStr += ';'
How to handle AND vrs OR? I know that C# can do all this and it is just like typing the sql query right into the code (except backwards). But I'm doing python.

Posted by Kurt | Permalink

09.27.2005 16:18

XStar NMEA weirdness

I was trying to plot the raw xstar longitudes and latitudes (after deviding by 1000), but I was getting a step function that was really nasty. I figured it was time to finally check out what the values in NMEALong, NMEALongSmall, NMEALat, and NMEALatSmall look like. The answer is not good. It is very possible that this is a bug in my code, but it might not be. The longitude values are ok, but the latitude functions seems to be experiencing some rounding or update issues.
./nav.py  | head -10
-448195 -74699200 147016 373 -- -124.49861111 -124.49866667 40.83777778
-448195 -74699200 147016 373 -- -124.49861111 -124.49866667 40.83777778
-448195 -74699200 147016 373 -- -124.49861111 -124.49866667 40.83777778
-448195 -74699220 147016 373 -- -124.49861111 -124.49870000 40.83777778
-448195 -74699220 147016 373 -- -124.49861111 -124.49870000 40.83777778
-448195 -74699230 147016 373 -- -124.49861111 -124.49871667 40.83777778
-448195 -74699230 147016 373 -- -124.49861111 -124.49871667 40.83777778
-448195 -74699230 147016 373 -- -124.49861111 -124.49871667 40.83777778
-448195 -74699260 147016 373 -- -124.49861111 -124.49876667 40.83777778
-448195 -74699260 147016 373 -- -124.49861111 -124.49876667 40.83777778
The code that basically generated the above is this bit-o-python
#!/usr/bin/env python
import sqlite
import os
import sys
import math
cx = sqlite.connect('segy.db')
cu = cx.cursor()
cu.execute('SELECT NMEALong, NMEALongSmall, NMEALat, NMEALatSmall from segyTrace')


for row in cu.fetchall(): print row['NMEALong'], row['NMEALongSmall'], row['NMEALat'], row['NMEALatSmall'], ' ---- ', print ("%15.8f" % (float(row['NMEALong'])/3600.)), ("%15.8f" %(row['NMEALongSmall']/600000.)), print ("%15.8f" % (row['NMEALat']/3600.)), float(row['NMEALatSmall'])/600000.
NMEALatSmall looks complete screwed up with that constant value of 373. At least NMEALonSmall works better than X or NMEALon. What to do? Here is what I have right now for looks:

09.27.2005 15:20

SIO Viz competition

Good luck to all the SIO grad students!
Please join us for Dr. Bridget Smith's introductory class for the 2005
SIO Graduate Student Visualization Contest:


Friday September 30th (official contest to be held on October 14th) 11AM to Noon SIO VizCenter (Top floor of the Revelle 4000 Blding)

Topics will include, but not be limited to:

- Using GMT and Fledermaus to create 3D scene files and movies using topography grids and scaler data - Using ImageReady to assemble frames for Quicktime movies - Using iMovie for creative & compact presentation - Using Garage Band for recording sound/narration - What the prizes will be this year - Who are the judges - How you can be a winner

Posted by Kurt | Permalink

09.27.2005 10:47

segysqldump.py with pretty Longitude/Latitude

I just fixed up segysqldump.py to allow for pretty printing of X,Y locations for shots. Sometimes it just takes a piece of paper to figure out a silly little equation like calculating the seconds from a decimal coordinate. I am still wondering how I avoid the fun traceback with head that you will see below. I guess I could wrap my printing code in try: foo except IOError: quietly die, but that seems ugly.
segysqldump.py  --verbosity=0 -n1 --min-sec -w 15| head 
['fileKey', 'traceNumber', 'X', 'Y', 'EnsembleNo', 'FieldRecNo', 
         'Xensemble', 'Yensemble', 'Shotpoint', 'TraceNoEnsemble']
['fileKey', 'traceNumber', 'X', 'Y', 'Shotpoint']


fileKey traceNumber X Y Shotpoint

1 1 124 29 55.00 W 40 50 16.00 N 88500 1 2 124 29 55.00 W 40 50 16.00 N 88501 1 3 124 29 55.00 W 40 50 16.00 N 88502 1 4 124 29 55.00 W 40 50 16.00 N 88503 1 5 124 29 55.00 W 40 50 16.00 N 88504 Traceback (most recent call last): File "/Users/schwehr/x/src/segy-py/segysqldump.py", line 260, in ? print val,' ', IOError: [Errno 32] Broken pipe

# schwehr@CatBoxII 38 $ cd && segysqldump.py --verbosity=0 -n1 --min-sec -w 15| tail 1 1495 124 31 5.00 W 40 50 24.00 N 89994 1 1496 124 31 5.00 W 40 50 24.00 N 89995 1 1497 124 31 6.00 W 40 50 24.00 N 89996 1 1498 124 31 6.00 W 40 50 24.00 N 89997 1 1499 124 31 6.00 W 40 50 24.00 N 89998 1 1500 124 31 6.00 W 40 50 24.00 N 89999
I am sitting in a coffee shop and what do I get next to me, but a group of moms meeting about being Brownie troop leaders :)
I tried to lookup my old UCSD library checkout record to find a book I was looking at last year. Nope. They dump all records once a book is returned for privacy reasons. Both good and bad. I have to keep my own records better.

Posted by Kurt | Permalink

09.27.2005 08:33

IOgear gme225b bluetooth mouse



UPDATE: I returned the iogear junk and am very happy with a Kensignton PocketMouse Optical Pro.

I am not too happy with my mouse purchase from yesterday... an IOgear GME225B bluetooth mouse. I should have stuck with a straight USB mouse. I only had a few minutes to get it before the shuttle came. Here is what I found this morning...
  One has to turn off the Authentication check box in the
  bluetooth setup icon in sys preferences and then it will reappear
  after a screen saver causes it to lose connection or if it is
  powered down and powered up. You can then turn on authentication and
  the IOGear mouse will stay connected for a while but if you lose the
  connection again for any reason, and there are many, it will not
  reappear unless you set it up all over again or just go and uncheck
  the Authentication box again and then recheck it. This is a major
  headache. The reason this is happening is that it does NOT pair
  properly. Using the OS setup assistant, it appears to PAIR but when
  you go to the BlueTooth icon after the setup, i.e. in System
  Preferences, and check the Devices tab, you'll see that it is indeed
  NOT paired. If this one problem were fixed, the mouse would be
  GREAT, but unfortunately, I have to give it only ONE star for a Mac,
  hoping that either the company or Apple's new Tiger OS will work
  with it. The manual needs updating a bit too.
The manual sucks. What do the different red and green blinking patterns mean? Why not label the connect button on the bottom of the mouse. It is not 100% clear which way batteries go in. I got it to work for a couple minutes at one point and 2x it has clicked and scroll wheeled, but no mouse movement. What gives?

I am trying to use it with 10.3.9 on an Tibook 1.5GHz... sigh.

Posted by Kurt | Permalink

09.25.2005 19:08

ipython rocks!

IPython rocks! Gareth gave me a quick tutorial and I just used it to debug a segy-py bug. Actually, segy-py really could use a complete rewrite. I wrote the whole thing and I still get a bit confused each time I try to get header values. I think all the subclasses just cause more trouble than they are worth.

Here is what I did with ipython:

Calls to getBinHeader were bailing on me and I couldn't figure out what was wrong. When I did print type(traceHeader) python just said that it was an instance. So I popped open an ipython just before this point to see what methods were available from traceHeader.
def offset2seconds(segy, trace, offset):
    traceHeader = segy.getTraceHdr(1)#trace)

    from IPython.Shell import IPShellEmbed
    ipshell = IPShellEmbed(argv=[])
    ipshell() 

    print type(traceHeader)
    interval = traceHeader.getBinHeader('SampleInterval')/1000000.
    delay    = traceHeader.getBinHeader('Delay')
    time = delay + interval * offset
    return time
Then at the ipython prompt, I just typed traceHeader.[tab] where [tab] is hitting the tab key.
In [2]: traceHeader.
traceHeader.__class__              traceHeader.getHeader
traceHeader.__doc__                traceHeader.getTextTranslateValue
traceHeader.__init__               traceHeader.printHeader
traceHeader.__module__             traceHeader.segyHdr
traceHeader.data                   traceHeader.sqlInsert
traceHeader.drv                    traceHeader.start
Aha! I was reading the methods for the wrong class. Not getBinHeader, but getHeader. Now all is well.

Brought to you by Unwritten and JoJo on my iPod

Posted by Kurt | Permalink

09.25.2005 17:37

segy-py 0.25 ... finding the bottom of the sea

I just added segywaterbottom.py to segy-py and released it as segy 0.25 (mud-sucker). So far it only does thresholding. That does not work so grate on a lot of datasets. This is more a place to put further algorithms.

I can imagine all sorts of algorithms for finding the water bottom. The type and shape of the water bottom (sediment-water interface) is going to drastically alter how each type of algorithm works. This is a lot like stereo computer vision. There are many basic algorithms and for each the details of the actual implementation really make a big difference. Paul has implement many of them. Python should be easier for us non-Fortran types to give them a try. I think a method that does multiple passes with a couple methods could make a rock solid detector.

SEE ALSO: http://sioseis.ucsd.edu/wbt.html

Posted by Kurt | Permalink

09.25.2005 15:29

Water bottom thresholding

I have been trying to see what is up with the water bottom thresholding that I was working on in sioseis. It was hard to see what was going, so I took a few minutes to start writing a water bottom program. Right now, I have only implemented thresholding. It is clear that thresholding is very touchy. I am doing 4 thresholds at dn levels of 15000, 10000, and 5000. The sensor is clipping at +/- 32000 for a few percent of the pings. Here is the command:
  ./segywaterbottom.py -t 15000 -t 10000 -t 5000 -t 1000 \
    -f line43.sgy -s 10 > foo


head foo

# FILE: line43.sgy 10 818 818 143 1 20 819 819 85 3 30 817 814 176 0 40 814 814 0 0 50 817 814 71 8 60 815 812 203 3 70 815 812 139 0 80 813 813 213 2
Then I did a quick gnuplot:
gnuplot> set title 'water bottom thresholding'
gnuplot> set yrange [0:2000]
gnuplot> set terminal gif
Terminal type set to 'gif'
Options are 'small size 640,480 '
gnuplot> set output 'threshold.gif'
gnuplot> plot 'foo' with l title '15000'\
         , 'foo' using 1:3 with lp title '10000'\
         , 'foo' using 1:4 with l title '5000'

A few things are clear. 10000 is very close to finding the water bottom. It occasionally triggers early. 5000 triggers too soon for most of the line (until ~17000). 15000 never triggers for a lot of traces. This freaks out gnuplot with data like this:
7640 None   None   35   9  
14350 None   452   26   5  
14500 None   632   3   0  
17890 None   82   6   1  
17900 None   463   28   5  

Posted by Kurt | Permalink

09.25.2005 14:03

Reverse switch - Mac to Windows

My thoughts as to this guys comments on Mac OSX:

Why I Might Switch Back...

   1. Anyone who says that Macs are more stable than Windows are smoking dope. I have two brand new Macs and they regularly go wacky and need reboots.


Say what? I typically reboot my laptop every couple of weeks. I have hit a few crashes from overheating, but that's my fault.

   2. My mini and PowerBook are 1.42Ghz and 1.5Ghz, with 1GB and 512MB
   respectively. They are both sloooooow. Though the PowerBook is a
   bit better, neither is as snappy as my two year old Celeron, and
   not anywhere near the cutting edge x86 laptops.
What have you got running? My powerbook is pretty snappy for general use.
   3. Also, the graphics power suck. ATI Radeon 9200 is anemic in
   2005. Playing Halo on either computer is a drastically reduced
   experience than on my Celeron 2Ghz Toshiba. 
Yeah, but last time I tried messing with windows graphics drivers, my life sucked. On the Mac it either works (which is usually the case) or doesn't.
   4. I don't like Mail or Safari. I much prefer Thunderbird and
   Firefox, both of which don't get much attention on the Mac
   platform. 
Say what? I am happily using the latest Firefox on OSX.
   5. I really dislike iPhoto. I much prefer the Windows thumbnails.
You don't have to use iPhoto if you don't want to.
   6. I hate the Finder. I thought the Windows Explorer was bad and
   wacky, but I had no idea. Finder makes me want to hurt someone. I
   especially love when folders don't merge, but replace. 
What do you mean merge? That sounds like a strange behavior!
   7. Trillian is so much better than Adium or Fire, and iChat is
   non-starter.
No clue what Trillian is like. I like Adium. Wish it did IRC and handled the iSight.
   8. I'm not a musician, GarageBand to me isn't particularly
   compelling.
So delete it like I did.
   9. Like it or not, it's a Windows world, and interop has to be a
   priority. If I take a few screen shots, paste them into a
   PowerPoint For Mac presentation and send them off, and no one can
   see them because the images have defaulted to some wacky Quicktime
   tiff? That's bad. 
How in the world did you end up with a quicktime tiff??? Are you sure you are using Mac OSX? Are you running classic or something?
  10. Keynote and Pages are both interesting, but non-standard. I
  wouldn't do any real work with them because I'd be afraid of trying
  to send documents to my coworkers. 
Hmm... I still use Word and Powerpoint all the time in OSX.
  11. Yahoo! Products work better on Windows: Yahoo! Messenger and
  Yahoo! Music Engine are awesome on the PC. Yes Y! could concentrate
  more on Mac products, but they're hardly alone here. 
Adium does just fine with yahoo messenging.
  12. In fact, most stuff is available on Windows first, sadly. And
  I'm a bleeding edge junkie. 
Ummm... try using bleading edge open source stuff in cygwin. Not fun.
  13. I like UltraEdit 32 over TextWrangler or TextEdit
Have you tried BBEdit? I really dislike it and prefer emacs, but that's me.
  14. You know, .Mac is interesting, but way too expensive.
I value my time. :) 15. The widescreen on the Powerbook is completely overrated. Web pages and documents are tall, not wide. Because the wide screen lowers the viewing center of the screen, I end up getting a crik in my neck looking "down" at the wide screen, rather than more straight ahead on PC based laptops. How is a Mac or Windows laptop different in terms of the screen?
  16. Having to remember my DVI to VGA adapter to hook up my PowerBook
  to an overhead is a pain in the ass. The wide-screen to 800×600
  presentation view is also jarring and painful.  
Why are you running 800x600?
  17. What is the friggin' deal with the .dmg files? The install
  process is so broken. Unzip .dmg.gz, mount .dmg, copy to
  Applications, unmount .dmg, delete .dmg, delete dmg.gz. Bleh.
And the windows registry is better? How about uninstalling? Grab the app, throw it in the trash. Done.
  18. Do you know how long it took me to get the idea that I had to
  empty the trash before I disconnected any external drives, memory
  cards, etc. otherwise the files just stayed whereever they were. And
  those fucking .DS_Store files... 
And windows ate my USB drive.
  19. I don't use iMovie. It'd be nice if I did, but it's not a plus
  as I don't have a DVD burner, and if I wanted to buy one, it'd cost
  me a ton. 
A firewire DVD burner does not cost more if you blog it into one OS or another.
  20. Everything for Macs cost more. From my $50 Mighty Mouse to my
  $150 iSight camera. 
Take your windows mouse and keyboard, plug them into your mac. I use a microsoft split keyboard on my mac.
  21. I thought having "Unix" underneath would be an advantage. But
  it's not Linux. Linux is what I know, the wackiness that is OSX
  confuses the hell out of me. I can barely figure out what's running
  and not running. I installed some HP Printer software drivers months
  ago and the control panel starts up automatically every day and sits
  in the Dock, despite my best efforts to track down where the HELL
  it's started from. 
How is the HP Printer driver a Mac Unix problem. That is should be in the HP is truly a lame company catagory. How do I get rid of that damn thing? Why is HP the only printer driver install on OSX that makes me reboot. HP, what in the world are you folks doing?
  22. I thought Expose was cool at first, but then realized I was
  going blind trying to find the right window. Spatial memory, what?
  Expose just randomly throws the windows around the screen, it's
  nuts.
Then turn it off. I use it to get to the desktop. That's it.
  23. I hate the Dock too. Each app responds differently. So some apps
  you can click on and the window appears at the top, others it
  ignores. And if you Minimize the window, well, it never pops
  up. WHY?!?! Urgh. Thank god I discovered Command+~ to swap between
  windows of the same app... I was losing my mind for a while trying
  to find things. 
Things like Photoshop and Illustrator work much better with the Dock than on windows. Why can't I drop a file on the Windows tool bar app?
  24. The hardware support isn't great. I've got several devices which
  just are completely ignored by the Mac, including a WebCam and
  several USB devices. And my iSight doesn't play nice with anything
  but iChat. WTF? Why isn't it just a DV device? 
I agree with the iSight, but nothing beats the linux method of opening /dev/isight and getting a ppm image. Can't get that on either.
  25. iSync is only marginally better than nothing. I thought it was a
  holy grail... it's really not. In fact, I tried to sync my wife's
  phone and wasn't being careful and it defaulted to a destructive
  sync and blanked out my wife's phone. ARRRGGGH. WHY!?!? 
What is isync? :) 26. I really don't like the fact that some apps close when their window goes away (like System preferences, and Windows Video for the Mac) and other apps stay there in memory forever until you notice them by accident... That is a little strange, but compaired to all the windows app differences, it is really minor.
  27. Spotlight isn't great. It's slow and doesn't seem to find what
  I'm looking for. 
I use locate and find.
  28. Dashboard is pretty useless as well. I've installed Yahoo!
  Widgets (Konfabulator) and that's much more what Dashboard should've
  worked like. 
So use Konfabulator.
  29. Does anyone use Sherlock any more?
No way do I use Sherlock.
  30. Windows Anti-aliasing for LCDs is more refined than OS X. You'd
  think it'd be opposite, but to me Macs seem fuzzy.
What are you doing wrong? I have very crisp text on all my displays.
  31. OSX mouse tracking isn't great. Why is that? Didn't they invent
  it? Why do I have to go get separate mouse drivers for my Microsoft,
  Logitech and MightyMouse mice? That's insane. 
I have never installed a mouse driver on OSX.
  32. Rendezvous/Bonjour works as advertised... but since no one
  around me uses a Mac, it really doesn't matter except for iTunes,
  and the Windows version supports that functionality any ways. 
Just ignore it then. Most of us do anyway.
  33. Hitting F11 by accident is a wonderful way to lose your mind. "AHHH!"
That seems pretty minor.

If you made it this far, you should know that I hardly know how to use Windows at this point. I will be relearning Windows starting in January, so maybe I will change my mind then. But I don't want to give up fink!

Current complaints about Windows:
  • Viruses and worms galore
  • Why am I giving money to zone alarm and symantec
  • I am terrified of updates/service packs
  • Explorer is deep in the OS for no apparently good reason
  • Drag and drop doesn't work so well
  • Shell access sucks
  • Cygwin is clunky, but at least I get bash and a working emacs
  • Why am I supposed to be paying for every little thing?
  • Why does a C/C++ compiler cost more
  • Visual basic...
  • Did you read the article about Vista starting over from scratch? Yeah, Mac OS < 10 really sucked too. Maybe the new OS will rock too.
  • When my disk crashes, I have to go buy another copy of windows since the system did not come with a set of real install CD/DVD media.
  • The registry
  • Embrace and extend. Okay, so Apple makes me nervous too.
  • If will be 10 years before a windows box is let into JPL's flight ops networks.
  • Swiss cheese by default.
  • Where are python, ruby, perl in the default install?
  • IIS and all those damn log messages I get from people thinking my Mac is Windows box that they can buffer overflow...
It should be fun working around Nathan and Jim who should be able to educate me much more on all the cool new stuff in windows. Some of my complaints above seem redundant.

Posted by Kurt | Permalink

09.25.2005 13:05

segy-py 0.24

segy-py version 0.24 is out.
  • segysql-sioseis-plt.py: New program to create a sioseis bash script
  • makepltsegy.py: More verbosity
  • segysqldump.py: Add --list-keys, --limit, and printing many keys
BTW, the plots created by segysql-sioseis-plt really suck. Sorry, but I am not that good at sioseis yet.

Posted by Kurt | Permalink

09.25.2005 12:34

sioseis water bottom picks

Just created an interesting little water bottom pick visualization. This is in the total hack catagory!

First, in my sioseis script, I have been trying to add gains hung off the water bottom with no luck. But here is what I have:
wbt3
  lprint 2
  thres 10000 track 0.5 end
end
I picked 10000 as a guess based on what I saw in this graph of the 100th trace in line43.sgy. I used 0.5 seconds for track, so that it basically would not track at all. The then ran the sioseis plot script with gave lots of these warnings:
****    0 ERRORS IN THIS JOB   ****
  ***  WARNING  ***  No pick, using last.
  picked time is   0.
  ***  WARNING  ***  Pick of   0.793249965 is outside the track.
  picked time is   0.
  ***  WARNING  ***  Pick of   0.710500002 is outside the track.
  picked time is   0.
  ***  WARNING  ***  Pick of   0.760999978 is outside the track.
  picked time is   0.
  ***  WARNING  ***  Pick of   0.712249994 is outside the track.
  picked time is   0.
Wait, those pick times in the warnings look great. So maybe the track time needs to be larger, but before that I wanted to see what they look like:
grep WARN foo | awk '{print $6}' | grep '0\.' > foo2
I can definitely see the water bottom.

Posted by Kurt | Permalink

09.25.2005 08:44

skateboarding is a crime in Portsmouth

Doh! I understand about trying to prevent skaters from ripping up benches and railings, but totally blocking skaters (the law is actually for roller skaters!) is a big bummer.

Skateboarders using public spaces risk a trip to court [seacoastonline]

Pedestrian hit by truck downtown, hospitalized

Posted by Kurt | Permalink

09.25.2005 08:29

pyblosxom

I finally got a chance to check out pyblosxom while on the plane last night. One thing I liked about nanoblogger that I did not experience with pyblosxom, is instant success. With nanoblogger, I had a demo page that looked nice and had a few posts in under a half an hour without any hard work. The reality is that there are thousands of tools that I should checkout and learn, but there is never enough time. So unless there is a clear reason for me to dive into a tool that requires substantial learning before I can see some good progress, I won't even try it. That happened to me with all the seismic tools. It was only when truly forced to that I finally figured out the basics to sioseis and pltsegy. The other tools have only received a few minutes of my attention.

Back to pyblosxom. I had this package high on my list of interesting projects due to being built on python. Most blogging tools are written in PHP. I have worked a bit with PHP, but I really like python - it is easy to work with and very expressive. I don't really want to have to figure out all the details of yet another programming language. Nanoblogger (my current tool) is great, but working with bash is challenging. Bash as a language is a million times better than csh, but it is just not up to building manageable API's for us mortals. Yes, it can be done, but I'd rather have python where I get a slew of API's that I can use to extend the blogging engine.

pyblosxom is a python cgi program and that was my first rough spot. Apache's http.conf is not someplace that I like to go into. I've setup virtual hosting and done a few things like that, but it is such a large beast that I end up with a lot of trial and error (mostly error). I used apache2 from fink with all the extras enabled (which I don't know how to use), so I started by editing /sw/etc/apache2/httpd.conf. I finally nuked the whole <Directory /Users/*/Sites> section and put it this:
AddHandler cgi-script .cgi .pl
<Directory /Users/schwehr/Sites/*>
    Options +ExecCGI
</Directory>
I did not want to use a ScriptAlias. After about 50 apachectl restarts I had a test cgi working. I never did figure out how to get php5 to work :(
I then tweaked ~/Sites/cgi-bin/config.py with the path to data and log dirs. Then I put a dummy file in data and fired up firefox with a open http://localhost/~schwehr/cgi-bin/pyblosxom.cgi. That worked, but what I got was ugly. My data file (post1.txt):
yada <b>yada</b> yada <font color="red">red</font>
The results...
Another pyblosxom blog

Another pyblosxom blog

Sat, 24 Sep 2005

yada yada yada red

posted at: 18:59 | path: / | permanent link to this entry

Made with PyBlosxom


Not so pretty. And it takes the date/time from the file. That is not going to work out so well for me. I see some serious potential with all the different available flavors/skins and the ability to use and make lots of pythonic plugins, but I am not going to be doing any switching right now. Perhaps this could be the basis for a nice research tool.

Posted by Kurt | Permalink

09.23.2005 22:06

3D file formats

This article got me to remember my work from last year: File Format Interoperability is Worth Sponsoring

The project it mentions is the python based (primarily) Uber-Converter. I was trying to make the ultimate tool for Zareh, Shigeru, and Dan Maas. I just did not get as far as I would have liked. terrain-0.1.tar.bz2 is a snapshot of where I left off.

trying to be able to convert meshed terrain between a whole bunch of different formats. I was trying focus on meshed height fields and the code was done before I got hooked on doxygen.

I was trying to work with Lightwave, OpenInventor, GMT (Generic Mapping Tools), PDS (NASA/JPL - planetary data system), Vicar (NASA/JPL), povray, pbm, and obj. I wish I had started in python rather than C++... I probably would have gotten a lot farther with python in the time I had available.

It is important to be able to quickly and easily get good quality mesh files with texture to all of the rendering teams in big missions. Too much time is wasted on file conversions with clunky tools so a lot of great possibilities are missed.

Posted by Kurt | Permalink

09.23.2005 15:06

How to manage updates remotely?

How do I install updates remotely on a Mac OSX box without resorting VNC or Remote Desktop? The Software Update app is fine if you are always at the console, but it chews up serious resources on one of my boxes that I rarely use from the console...
USER      PID %CPU %MEM      VSZ    RSS  TT  STAT STARTED      TIME COMMAND
schwehr  xxxx 16.5  1.1   115268   7256  ??  S    Sun09PM 699:42.73 /System\
/Library/CoreServices/Software Update.app/Contents/MacOS/Software Upda
16.5% of the CPU to do absolutely nothing. Yet apache is hardly using anything.

Posted by Kurt | Permalink

09.23.2005 14:54

SIO news - HDTV from a ridge vent area

SIO still has no RSS feed, so I'll add it to mine... This came from John Orcutt all at sio mailing.
  This coming week we will be bringing high-definition imagery (HDTV)
  from the seafloor in a ridge vent area off British Columbia to a
  national meeting at UCSD - iGrid.  iGrid is being held at the new
  Calit2 building and is an international meeting featuring research
  on computer grid technologies and science. The route from the
  seafloor to UCSD and Scripps is complex including fiber optics from
  the WHOI JASON vehicle (with a new HDTV camera) to the R/V Thompson
  and via a highly modified HiSeasNet antenna to a geosynchronous
  satellite. The downlink takes the signal to the University of
  Washington where it climbs aboard a dark optical fiber, part of the
  National Lambda Rail, with a 10Gbps capacity.  Finally, the signal
  will come to iGrid and a lower-bandwidth version will come to the
  IGPP Board Room for display on a plasma panel. 


You're welcome to come by the IGPP Board Room on 28 or 29 September, 1:30 - 3 pm, to have a look if you're interested. John Delaney will be narrating the dive aboard the ship while I will be connecting back to the ship from iGrid using HDTV - Larry Smarr will join us on the first day. This has never been done previously so we're hoping that weather and technology smile upon us! However, 3-4 years from now this will have become routine and provide many with remote access to the sea.

For more information go to http://siovizcenter.ucsd.edu/optiputer/igrid2005.html. More about HiSeasNet and this experiment can be found at http://hiseasnet.ucsd.edu/news.html#12sept05.

Posted by Kurt | Permalink

09.23.2005 11:03

Publishing a book of a weblog

Has anyone tried making a bound book out of a weblog? I am sure I could just go to each months page in a browser and print it. I could then take it to some place like Kinko's (or ask Luciano to recommend some place better).

You are probably asking why would I want to do that?!?! There are a number of reasons. First of which is that a book is a totally different user interface than anything that can be archived with a computer right now. Flipping pages just has a certain feel. I can write in it or put post-its on it (this is where the librarians get mad at me). There is a permanency with a bound book that I can't have with a computer (just you try to read your 10 year old tape backups!). On the legal side, binding a book sets something in stone at a certain date. Many professions are required to keep paper logs that are notarized and all that business.

I already keep a couple different types of paper journals. Having a bound weblog for each year would be a nice complement to those. There is nothing like paging back through older notebooks for refreshers, inspiration, lost ideas, or techniques. There are plenty of things with electronic logs that I can't do with paper, but the reverse is definitely true too!

There seems to be many ways to go about this, but if I have chunks of html, any suggestions? I would like to do some simple stuff like scale images so that fit nicely on pages.

Maybe I should switch to writing my weblog entries in LaTeX. Then each one would print nicely. More likely, that would be insane. Are there any weblog engines that already have this in mind?

Then I am sure there are a few entries that really are not worth printing. It would be good to be able to flag them for not going into a final book.

Posted by Kurt | Permalink

09.23.2005 10:54

Large geometric object in the water

I saw this thing sitting outside of the Chase Ocean Engineering building and wondered what it was. Now we know... What's that? UNH's latest fish experiment
  Looking like a gigantic black, mesh and steel geometric ball, the
  tank will be evaluated for possible use by the University of New
  Hampshire's aquaculture program.


Professor Richard Langan is the project director for UNH's aquaculture program. ...

Posted by Kurt | Permalink

09.23.2005 10:43

Nuclear fuel

Nuclear fuel train car derails on way to yard
  ...
  "These containers are infrequently shipped since nuclear-powered
  warships can operate over 20 years without refueling," Public
  Affairs officer Debbie White said in a written response to inquiries
  by the Portsmouth Herald Thursday. 


White said on average, spent fuel is transported from Portsmouth once every two years.

"The spent fuel is removed from the submarine and placed into robust shipping containers that are specifically designed and constructed for transporting Naval spent fuel from a Navy warship," White said. ...

Posted by Kurt | Permalink

09.23.2005 08:38

Torrent clients compaired and Geographic documents

After yesterdays complaint about BitTorrent, I ran into an article compairing Torrent Clients! [wikipedia]

Azureus looks to be the best in that chart. Only trouble is that it is a java application.

OpenGeoSpatial.org

If you look at the image below, this is EXACTLY the kind of application that I have been telling people is critical for journal articles. e.g. Not all articles on the Eel River Basin (Off Eureka, CA) have the STRATAFORM keyword. I would rather get a bounding box of papers and then start my query from there!!!
  CPS is an extensive collaborative Web content management system
  (CMS) implemented on top of Zope and the CMF, that enables
  organizations to easily, quickly and efficiently implement
  collaborative portals (intranet, extranet or internet) and workflow-
  oriented business applications.
CPSGeo
  Cartographic maps are extremely useful tools for analyzing and
  summarizing information with a spatial component, and many CPS
  documents have a spatial component: events happen at places, and
  reports are often concerned with places. With the addition of a few
  simple properties, CPS documents can be promoted to GIS (Geographic
  Information System) features. The CPSGeo product provides a new
  geolocation schema for documents, and a lightweight web GIS
  application for locating and displaying document features
  cartographically.


CPSGeo builds upon open standards for GIS interoperability such as GML, the Geography Markup Language, and WMS, the Web Map Service specification. The body which oversees these standards is the Open Geospatial Consortium

Posted by Kurt | Permalink

09.22.2005 21:40

debugging with python

Debugging in Python seems like a pretty good into to pdb. Once I am in the debugger and see the (Pdb) prompt, it feels a lot like gdb.
#!/usr/bin/env python
a = "aaa"


import pdb pdb.set_trace()

b = "bbb" c = "ccc" final = a + b + c print final
I then did some stuff with next and continue.
(Pdb) n
> /Users/schwehr/Desktop/py/epdb1.py(7)?()
-> c = "ccc"
(Pdb) n
> /Users/schwehr/Desktop/py/epdb1.py(8)?()
-> final = a + b + c
(Pdb) c
aaabbbccc
The grand unified debugger (gud) does not know how to cope with pdb, but there is an emacs mode for the python debugger: pdb-mode. I added this to my .emacs file:
(setq load-path
      (append
       '("~/.emacs-lisp")
       load-path))


(autoload 'pdb-mode "pdb" "python debugger major mode" t)

Posted by Kurt | Permalink

09.22.2005 19:22

gdal python in fink

I tried just removing the --without-python in the configure line of gdal 1.2.6 info file in fink 10.3 unstable. Of course it did not work...
g++-3.3 -Wl,-bind_at_load  -o .libs/_gdalmodule.so -bundle \
.libs/gdal_wrap.o .libs/numpydataset.o .libs/gdalnumeric.o \
/sw/lib/libpq.dylib /sw/lib/libnetcdf.dylib /sw/lib/libpng.dylib \
/sw/lib/libogdi31.dylib -L/usr/X11R6/lib /sw/lib/libiconv.dylib \
-L/sw/lib -L/sw/src /sw/lib/libproj.dylib /sw/lib/libgeos.dylib \
/sw/lib/libodbc.dylib -L/sw -logdi31 /sw/lib/libgif.dylib \
/sw/lib/libjpeg.dylib /sw/lib/libtiff.dylib -lpng -lnetcdf -lcfitsio \
-lz -ldl -lpq -L/sw/src/fink.build/gdal-1.2.6-6/gdal-1.2.6/.libs \
../.libs/libgdal.dylib 
ld: warning -prebind has no effect with -bundle
ld: Undefined symbols:
_PyArg_Parse
_PyArg_ParseTuple
_PyDict_New
_PyDict_Next
_PyDict_SetItem
_PyDict_Type
_PyErr_Clear
_PyErr_SetString
_PyEval_CallObjectWithKeywords
_PyExc_MemoryError
_PyExc_NameError
_PyExc_TypeError
_PyExc_ValueError
_PyFloat_AsDouble
_PyFloat_FromDouble
_PyInt_AsLong
_PyInt_FromLong
_PyInt_Type
_PyList_New
_PyList_SetItem
_PyList_Size
_PyList_Type
_PyModule_GetDict
_PyObject_AsWriteBuffer
_PyString_AsString
_PyString_FromString
_PyString_FromStringAndSize
_PyString_Type
_PyTuple_Size
_PyTuple_Type
_PyType_IsSubtype
_PyType_Type
_Py_BuildValue
_Py_InitModule4
__Py_NoneStruct
make[1]: *** [_gdalmodule.la] Error 1
make: *** [py-module] Error 2
### execution of /var/tmp/tmp.1.6XodMR failed, exit code 2
I also tried building gdal 1.3.0 with these configure lines, but no success:
  ./configure --prefix=/Users/schwehr/Desktop/gdal/install
  ./configure --prefix=/Users/schwehr/Desktop/gdal/install --with-libtiff=internal
  ./configure --prefix=/Users/schwehr/Desktop/gdal/install --with-libtiff=no
  ./configure --prefix=/Users/schwehr/Desktop/gdal/install --with-libtiff=internal --with-hdf5=no

Posted by Kurt | Permalink

09.22.2005 14:53

BitTorrent not that great?

I'm feeling a little bit clueless. I wanted to download the Doom 3 demo for Mac OSX. In a half hour I had only 4 peers, downloaded 1.5 MB (out of 430MB) and my laptop was working super hard. I was using BitTorrent 4.1.1 from http://www.bittorrent.com. Now I see there is a 4.1.2. Will it help? This is why I do not like normal Mac Apps. Why do I have to go check version tracker to find out that there is a newer version. Some apps check for new versions, but what it you haven't run the app? Then when I'm somewhere off the net (e.g. on a ship) I may not be able to get the newest version.

Tomato Torrent seems to use only about a quarter of the CPU.

Posted by Kurt | Permalink

09.22.2005 14:25

SoQt 1.3.0 released

SoQt 1.3.0 is a minor release.  The release contains build setup
improvements, bugfixes, and documentation improvements.  It also
contains some minor API extensions beyond the previous release.
  • install SoGuiMaterialEditor.h
  • SoQtGLWidget::setStealFocus()/isStealFocus()
  • support for Mac OS 10.4 "Tiger"
  • complete Visual Studio project file setup under build/
  • misc minor fixes

Posted by Kurt | Permalink

09.21.2005 21:40

Katrina Google Earth


Posted by Kurt | Permalink

09.21.2005 17:52

Katrina GIS response in Missippi

GISuser has this article: GIS and GISCorps Respond to Hurricane Katrina in Mississippi
    Talbot J. Brooks, Director, Center for Interdisciplinary
    Geospatial Information Technologies, Delta State University worked
    within MEMA, FEMA, and the rest of the alphabet soup to start GIS
    at the Jackson Emergency Operations Center. According to Brooks,
    the GISCorps call for help came at his request. He has graciously
    shared his story of Hurricane Katrina, the role GIS played in the
    response, and the 27 August - 6 September time period.... in his
    words... he was "there". Read on for a look at the response, some
    Q & A's, and example maps and images from the URISA GIScorps in
    Mississippi. 


The preparation for a response actually started a week before Katrina came. It was then that Brooks helped write mission statements with the Emergency Manager for Bolivar County, MS., Leonard Locke from Delta State took part (helped would eventually construct a missing persons database), as did Ken McCool from McCool Management Services who ultimately helped direct the public works reconstruction effort.

Talbot Brooks was not aware of GIS Corps prior to this event and noted, "I will be forever grateful to them (Shoreh - GIScorps) for getting through to me and lining up their awesome help." Brooks started sending emails and contacting his entire GIT contact list on Sunday (Aug 28), starting with messages to Bob Samborski (GITA) and numerous colleagues within the MS education system. These contacts eventually got him in touch with the GIScorps.

The following are some examples of products created during the first 10 days of work. Mr. Brooks arrived in Jackson the Saturday before Katrina hit and began working on flood and wind damage model prediction with Chris Mullens, a structural engineer from the University of MS, using HAZUS (FEMA model that runs within ArcGIS). He also quickly realized that GIS was going to be needed big-time and put out the call for help. GIS Corps, GITA, ESRI, the State's educational systems, and some State agencies answered the call immediately and responded with equipment and personnel. Working at the Jackson Emergency Operations Center in support of the Mississippi Emergency Management Agency, FEMA, and the National Guards, here's some of what this ad-hoc operation accomplished: ...

Posted by Kurt | Permalink

09.21.2005 12:44

My first sioseis plot

I finally gave plotting in sioseis a try. Pltsegy has been really great for the xstar chirp data, but I have not figured out the deal for the Huntec channel 1 data. This plot is not pretty, but it is the first one that actually looks somewhat like the data. I can see the wbt. There are no gains applied.

#!/bin/bash
# First attempt to use sioseis for plotting the huntec data.
sioseis=/Users/schwehr/x/src/sioseis/sioseis.Darwin
INFILE=line43-ch1-5575-6175.sgy
# stime  - time offset from shot to start plotting
# nsecs  - number of seconds of data to plot
# vscale - vertical scale in inches per sec
# trpin  - traces per inch on the horizontal
# wiggle - with 0 the it plots too much!
# opath  - where to write the file on disk
$sioseis <<EOF
procs diskin prout plot end
diskin
  ipath $INFILE end
end
!
plot
  stime .6
  nsecs .1
  vscale 40
  trpin 100
  wiggle 0
  opath foo.sio end
end
!
end
EOF
sio2sun foo.sio foo.sun
convert -rotate 90 foo.sun foo.png
xv foo.png
Without the wiggle 0 the graph looks even worse.

Update: Adding def .1 and clip .1 made a big improvement over this picture!

Posted by Kurt | Permalink

09.21.2005 11:34

blog map

From gvisit.com
...
This needs a time slider!

Posted by Kurt | Permalink

09.21.2005 08:38

GDAL/OGR python support

FINK-TODO: GDAL/OGR python modules.

Fink had gdal, but does not provide the python interface. I just took a look at http://hobu.biz/software/OSGIS_Hacks/ which gives some quick tutorials for these python packages. It is frustrating to not have the python interfaces available in fink!

Posted by Kurt | Permalink

09.21.2005 08:27

CMU on SGI web page

I used to be a fanatical SGI IRIX user, bu I have not used an SGI other than the sioviz center as anything other than disk storage during the last couple years. I still try to pay a little attention to SGI. I saw this article today.

Robotic Research Goes Off-Road
  Robotic Research Goes Off-Road: SGI technology provides critical
  tools for team competing in defense department-sponsored autonomous
  ground vehicle race 


For decades, scientists and engineers have worked on how to overcome the challenges of applying robotic technology to replace or supplement human intervention in a variety of environments. Carnegie Mellon University's Red Team, which includes sponsors such as SGI, Boeing, Caterpillar, SAIC, Intel, and AM General, will compete in this year's DARPA Grand Challenge with two entries based on AM General's Humvee vehicle design 'H1ghlander' and 'Sandstorm.' Carnegie Mellon University's Red Team, which includes sponsors such as SGI, Boeing, Caterpillar, SAIC, Intel, and AM General, will compete in this year's DARPA Grand Challenge with two entries based on AM General's Humvee vehicle design "H1ghlander" and "Sandstorm". Now, a $2 million prize competition sponsored by the U.S. Department of Defense to build a fully autonomous vehicle that can drive on- and off-road through the desert without human drivers could impact a host of civilian applications for this kind of robotic technology, including the potential of enabling blind people to "drive" cars. However, the primary goal of this DoD-sponsored field test is to accelerate research and development in robotic ground vehicles that will ultimately help save soldiers' lives on the battlefield. ...
I spent a year in CMU's FRC working on autonomous systems, so it is nice to see them featured.

Posted by Kurt | Permalink

09.21.2005 08:21

Power outage

http://www.seacoastonline.com/
  Reader Alert: Scheduled power outage Wednesday morning


Between 2 a.m. and 4 a.m.this morning there will be a power outage effecting 2,100 residences and businesses in downtown Portsmouth. Public Service of New Hampshire has scheduled the outage to conduct necessary maintenance at the Jackson Hill substation on Northwest Street.
That was not so fun. A little nice before would have been nice! It got very quiet around here.

seacoastonline:
  PORTSMOUTH - From a third-floor business downtown, Michael Gray's
  company is making a big difference in the South. 


Global Relief Technologies has done for relief workers what computers did for the banking industry. The company has managed to take the pens and pads away from people trying to document what is needed in an area by turning the process of gathering vital information into a method that is as easy as using an automatic-teller machine to check a balance on an account. ...

Posted by Kurt | Permalink

09.20.2005 18:37

pygps, nmea-py, gps-py, pynmea

Wikipedia NMEA

I took a look in pygps and it looks a little different than what I was hoping. What I was looking for was a solid library for talking to GPS data. pygps does more and less. It has a graphical interface which is more and it has minimal coverage of NMEA strings.

http://gpsd.berlios.de/NMEA.txt has an excellent description of all the NMEA strings.

The eventually I would like to extend this to cover AIS.

FINK-TODO: gpsd

How would you define a NMEA library for GPS?

My initial thoughts were a class that detects which message is in a string, calls a class method to convert the data to a dictionary with the name of the field as each key with the value from the string. This would do no translation or interpretation. Coordinate transforms are up to you (using something like pyproj).

Then we start adding some lookup tables for some of the enumerated values mean. For example, GGA (Global Positioning System Fix Data) has field 6 for the GPS Quality indicator. nmea-py should have a dictionary for converting the values like this:
gpsQuality = {
0: "fix not available",
1: "GPS fix",
2: "Differential GPS fix",
3: "PPS fix",  # What does that mean?
...
}
Then a separate module could be written that knows how to command each vendors GPS units doing things like uploading way points, commanding baud rates, modes, etc.

Looks like the 'd' key on my keyboard is getting weak, my apologies for missing 'd' letters.

Posted by Kurt | Permalink

09.20.2005 12:53

lightning in SD hits a pier

From Rob Newman:
  Over the last couple of years the ROADNet project has deployed
  multiple high resolution cameras throughout San Diego county that
  automatically take photos at pre-specified rates. These photos are
  transmitted to a real time database here at SIO via the HPWREN
  project, and then displayed on the web via a Real Time Image
  Bank. The cameras operate 365-24/7. Last night's storm was recorded
  by the cameras, and there is one great image that captures lightning
  striking the Imperial Beach pier: 
http://mercali.ucsd.edu/db/2005/263/SCC_IBpier_cam.10:17:09.jpeg


The photo resolution is 2048px x 1536px. It is slightly grainy due to the salty air down on the beach front crusting up the lens. Apologies for that. There may be more images recorded by other cameras, but this is the best one I found after a cursory 5 minute search. Please let me know if you find any more!

The actual online application is here:

http://mercali.ucsd.edu/rtapps/rtimbank.php

You can view images taken by multiple cameras (including the R/V's Revelle & Melville while they are out at sea).This web application does require a modern (post-2000), W3C standards compliant browser, so if you can't see the application you will need to upgrade. Examples of bad (outdated) browsers include Netscape 4.7 and Internet Explorer 5 (for Mac). If you have questions about the image or application please don't hesitate to ask.

Learn more about ROADNet: http://roadnet.ucsd.edu Learn more about HPWREN: http://hpwren.ucsd.edu

Posted by Kurt | Permalink

09.20.2005 12:34

Cell phone visualization

This article looks very similiar to what Alex and I saw at ATT research back in 1998/1999 when we visited for the Computer Science competition (which Alex won!) We saw the sunrise go across America in telephone calls.

MIT Researchers Map City By Cellphone
Can you see me now?
	
  Researchers at MIT may not be able to hear your cellphone call, but
  they have found a way to see it. They mapped a city in real time by
  tracking tens of thousands of people traveling about carrying
  cellphones. 


Using anonymous cellphone data provided by the leading cellphone operator in Austria, A1/Mobilkom, the researchers developed the Mobile Landscapes project, creating electronic maps of cellphone use in the metropolitan area of Graz, Austria, the country's second-largest city.

The researchers used three types of data -- density of cellphone calls, origins and destinations of the calls, and position of users tracked at regular intervals -- to create computer-generated images that can be overlayed with one another and with geographic and street maps of a city to show the peaks and valleys of the landscape as well as peaks in cellphone use.

"For the first time ever we are able to visualize the full dynamics of a city in real time," said project leader Carlo Ratti, an architect/engineer and head of the SENSEable City Laboratory at the Massachusetts Institute of Technology. "This opens up new possibilities for urban studies and planning. The real-time city is now real: a system that is able to continuously sense its condition and can quickly react to its criticalities," he added.
I doubt that this is the "first time ever," but it is still very cool.

Posted by Kurt | Permalink

09.20.2005 12:08

pltsegy/sioseis for Huntec data - needs work

I have had a couple X11 lockups with 10.3.9 is the last week. What gives?

Right now, I am trying to redo the plots for the Huntec data with sioseis and pltsegy. I am able to get a plot, but it is definitely hosed. Now I get to learn how to straighten it out. I am pretty sure that this is caused by the different scaling and shape of the trace. Additionally,, the xstar data is not symmetrical.



Huntec:


star via sioseis xstar type 2 dummies 2 end end:

Posted by Kurt | Permalink

09.20.2005 11:05

Extracting just one channel from a segy file

I am reprocessing the Huntec data from line 43 with sioseis. I needed to be able to extract just one channel. Channel 1 is the higher frequence receiver inside of the fish. Channel 2 is flapping in the breeze.
lsd t.sgy | head
      SHOT   TR       RP    TR ID  RANGE DELAY NSAMPS
      5575     1       0     0  1      0   610   2048
      5575     2       0     0  1      0   610   2048
      5576     1       0     0  1      0   610   2048
      5576     2       0     0  1      0   610   2048
The run the script and I end up with this lsd:
lsd t-5575-6175.sgy  | head
      SHOT   TR       RP    TR ID  RANGE DELAY NSAMPS    
      5575     1       0     0  1      0   610   2048
      5576     1       0     0  1      0   610   2048
      5577     1       0     0  1      0   610   2048
      5578     1       0     0  1      0   610   2048
Here is the code with the key change in diskoa in bold:
#!/bin/bash
start=$2
end=$3
declare -r INFILE=$1
declare -r OUTFILE=${INFILE%%.sgy}-$start-$end.sgy
echo RANGE:  $start ... $end
echo INFILE $INFILE
echo OUTFILE $OUTFILE
OS=`uname -s`
sioseis=${HOME}/x/src/sioseis/sioseis.${OS}
$sioseis << EOF 
procs diskin prout diskoa end
diskin
  ipath $INFILE end
end
!
prout
 indices l1 l2 l3 l4 l6 noinc 500 end
end
!
diskoa
 opath $OUTFILE  fno $start lno  $end FTR 0 LTR 1 end
end
!
end
EOF

Posted by Kurt | Permalink

09.20.2005 10:06

simple subsetting sioseis script

Here is a very basic sioseis script. When I am working on rendering a small upset of the line, it is nice to have just a small subset of the shots in a segy file. This makes the rest of the process quicker. I then don't have to worry about first and last shots and disk usage is kept to a minimum. First use lsd to see the total number of shots. My subset will be from shots 88500 to 90000
lsd EEL5kL03.sgy  | head -4
      SHOT   TR       RP    TR ID  RANGE DELAY NSAMPS    SI   YR DAY HR MIN SEC
     83543     1   83543     0  1      0    90   1988    83 1999 217 22  44  25
     83543     1   83543     0  1      0    90   1988    83 1999 217 22  44  25
     83544     1   83544     0  1      0    90   1988    83 1999 217 22  44  25


# schwehr@CatBoxII 66 $ cd && lsd EEL5kL03.sgy | tail -4 93535 1 93535 0 1 0 380 1988 83 1999 218 0 16 51 93536 1 93536 0 1 0 380 1988 83 1999 218 0 16 51 93537 1 93537 0 1 0 380 1988 83 1999 218 0 16 52 93538 1 93538 0 1 0 380 1988 83 1999 218 0 16 52
I then run the chop command: ./sioseis-chop.bash EEL5kL03-00001.sgy 88500 90000:
ls -l EEL5kL03*.sgy
-rwxr-xr-x    1 schwehr  staff    41274896 Sep 20 08:00 EEL5kL03-88500-99000.sgy
-rwxr-xr-x    1 schwehr  staff    81890832 Sep 20 07:57 EEL5kL03.sgy
#!/bin/bash
declare -ri EXIT_FAILURE=1
if [ $# != 3 ] ; then
  echo
  echo "  ERROR: Must specify 3 arguments.  Found $#"
  echo
  echo "  usage:  $0 [segy in file] [start] [end] " 
  echo
  echo "  Example:"
  echo "    $0 longline.sgy 88500 90000"
  exit $EXIT_FAILURE
fi
declare -ri start=$2
declare -ir end=$3
declare -r INFILE=$1
declare -r OUTFILE=${INFILE%%.sgy}-$start-$end.sgy
echo RANGE:  $start ... $end
echo INFILE $INFILE
echo OUTFILE $OUTFILE
OS=`uname -s`
#sioseis=${HOME}/bin/sioseis.${OS}
sioseis=sioseis
$sioseis << EOF 
procs diskin diskoa end
diskin
  ipath $INFILE end
end
!
diskoa
 opath $OUTFILE  fno $start lno $end end
end
end
EOF

Posted by Kurt | Permalink

09.19.2005 20:20

Coin 2.4.4

I am getting even farther behind in the Coin/Fink updates.

Coin 2.4.4 Released
Systems in Motion is proud to release v2.4.4 of the Coin 3D graphics
library.  Coin 2.4.4 is a patchlevel release.  Patchlevel releases
contain mostly bugfixes, optimizations, documentation improvements,
and configure and build setup fixes.  This release does not extend the
library API beyond the previous release.
NEWS File Excerpt for 2.4.4:
improvements and optimizations:
  • further improvements to SoOffscreenRenderer performance
  • SoRayPickAction precision improvements
  • Visual Studio project now installs only selected build (including static configurations now)
  • misc minor details, build fixes, documentation updates
bugfixes:
  • SoSurroundScale bugfix
  • hidden field enableTextureCompression access crashbug fix
  • misc minor robustness fixes

Posted by Kurt | Permalink

09.19.2005 20:14

More martian water

Water Detection At Gusev Described - Chemical Proof For Two Wet Scenarios

Alian Wang, Larry A. Haskin, and Ralph E. Morrow study Mazatzal.

Posted by Kurt | Permalink

09.19.2005 15:54

Driving the Coastal Surveyor

Today I got to drive the Coastal Surveyor for testing the novice training of boat driving. Wow! I knew it was hard to drive a transect line, but it was harder that I expected. We got flagged down by a passing boat to see if there was someone driving drunk :)

Posted by Kurt | Permalink

09.19.2005 15:41

placeopedia.com

Check out placeopedia



Makes me think that is time for me to make up a google map for my publications web page. Something like what I did for LaJolla in Fledermaus in 2003 or OpenInventor/XCore in 2002.


Posted by Kurt | Permalink

09.18.2005 15:48

Trouble on the Piscataqua river

About an hour and a half ago a small coast guard and an equal sized NH patrol craft zoomed up to the I95 overpass with sirens going. Now the was just a sweep by a Coast Guard helicopter. There is an ambulance at the north size of the 1 draw bridge. The NH patrol boat is close to the 1 draw bridge on the north side.



Just saw a white boat labeled with a red "search and rescue" on it up there.

UPDATE:

Another suspected jumper from Portsmouth high bridge [Foster's Online]
  For the third weekend in a row, U.S. Coast Guard officials searched
  the area below the Piscataqua River Bridge Sunday for a person
  suspected to have jumped from the Interstate 95 passageway. 


Authorities received a report of a white male between 15 and 18 years old having climbed over the rail of the bridge at about 2 p.m., according to Bill Abt, day officer at the Coast Guard's Portsmouth Harbor station in New Castle.

Posted by Kurt | Permalink

09.18.2005 10:27

Finding the water bottom

I figured I'd give a go at using the automatic water bottom pickers. I clearly do not understand what is going on. So be aware that what I write in this section is not right. It is mostly for me to record what I have done and what the results were.

I started with the sgy file produced by my last couple of posts. This file has been converted to standard SEGY by sioseis with the 2 channels merged into one with this sioseis option:
xstar
   type 2 dummies 2  end
end
Here is the input file: 6049296 Sep 16 12:37 EEL5kL01-00001.sgy. I have a script that is hard coded for working on this example file.
#!/bin/bash


declare -r FNO=0 declare -r LNO=999999 declare -r INFILE=EEL5kL01-00001.sgy declare -r OUTFILE=EEL5kL01-00001-wbt.sgy declare -r GAINFILE=default.gains

OS=`uname -s` sioseis=${HOME}/x/src/sioseis/sioseis.${OS} $sioseis << EOF procs diskin header wbt3 gains prout diskoa end ! diskin ipath $INFILE end end ! header fno $FNO lno $LNO l6 = l3 end end ! ORIGINAL thres 0.000000005 track 0.005 end wbt3 thres 0.000000005 track 0.05 end end ! gains fno $FNO lno $LNO addwb yes type 9 TGP `cat $GAINFILE` end end ! ! wbt = l50 prout indices l1 l2 l3 l4 l6 l50 fno $FNO lno $LNO end end ! diskoa opath $OUTFILE fno $FNO lno $LNO ftr 0 ltr 1 end end ! end EOF
I am using wbt3 which is described on Paul's wbt page. I then added a prout to display the water bottom picks. I wanted to see what the picks look like. The l50 entry in prout is the water bottom value. I got that by finding wbt in segy.header.

The default.gains file looks like this:
    0.0000    1.0000
    0.0005    1.0000
    0.0020    5.0000
    0.005     10.0000
    0.0200    15.0000 
    0.0500    15.0000
    0.1       40.000
I then have a pltsegy file that plots the new file. I will not include the pltsegy file since it is very long.

I then wanted to take a look at the water bottom picks and the resulting pltsegy output. How could I draw the wbt picks right on top of the graph? A little grep and awk will make a table of the picks by wbt3:
./wbt.bash | grep -v WARNING | awk '{print $1,$4,$6}' | \
grep '1\.0' > foo
I then took a look at them with gnuplot.
gnuplot
plot 'foo' using 1:3 with l
Here is the plot: and the resulting pltsegy screen grab. Note that this is a time pick, so as the picks get shallower, the plot goes down. Also, since I relaxed the allowable jump between picks with a track 0.05, there are a couple spikes. You can see these spike in the pltsegy figure as grayed out zones.

So at this point, I don't have a nice figure, but I am getting much more comfortable with sioseis.

UPDATE: This seems to work:
wbt3
  thres 0.0000000001 track 0.05 end
end
The units on the wbt pick seem a little strange to me.

Posted by Kurt | Permalink

09.18.2005 09:25

Clearing out the bookmarks



Color Perception - go to this site. Takes only a couple minutes.

I have been making some bookmarks in Firefox 1.5 Beta 1 with the intention of getting back to them. So now it is Sunday morning and I am getting back to them.

First, what do I think of Firefox 1.5 Beta 1 after switching from Safari? It's mostly better. The best thing so far is the search widow at the bottom of the window. I also like that NetNewsWire Lite opens links in Firefox in new tabs. Much cleaner than a billion windows.

Now what is not to like? There are some performance issues. I don't get pinwheels that often, but frequently Firefox will just sit there for 10-20 seconds doing I have no idea what. I have not figured out what the keyboard shortcut for switching tabs is. I wish that Ctrl-A and Ctrl-E worked within fields to just to the beginning or ending of the field. I have had a crash or two. Often keyboard scrolling stops working and then starts working again in another window. I can't figure this one out. Clicking within the frame does not help. Very frustrating. And what is firefox doing all the time? It really eats CPU doing I don't know what. Downloading an mp3 interview should not use 50% of my CPU! Not good for the laptop when without AC or if I am trying to crunch data and need all the CPU I can get.

I have no plugins installed. I don't have time to mess with that kind of stuff right now.

FreeTechBooks - Math section - Most of the Free Tech Books sights is not very exciting, but maybe some of the math texts may be of use. Idonno.

How to create an RSS 2.0 Feed

Coding a Smarter RSS Podcast Button

GoogleBlog at blogspot has an article about the National Geographic/GoogleMap combo. Google is the center of quite a bit new and cool in the world of mapping, but I fear the consequences of depending heavily on them. What about google makes them a safe company to bet on? They really could tank overnight and then where will we be? And what if I don't have a net connection or it is erratic?

Darwin Kernel Extensions - Is this something I should be thinking about? I want a clean and simple interface to a number of devices. Apple's APIs are neither clean nor simple. Yes they are powerful and beautiful, but what if I just want the basics and want them without the monumental learning curve? Maybe writing a kernel extension could fix this??? I want the BTB848 Linux video driver from that Italian guy in the late 1990's. Damn that was simple and we had it working in MINUTES. Not even an hour from installing the frame grabber/video camera to working with images in our code.

Introduction to FireWire Device Interface Guide

Interview with Tyler Mitchell, author of Web Mapping Illustrated.

I would really like to log everything that I do on the computer for a time period. Not the details, but the generals. How much time do I spend in which app. Then I'd like to do that at a science operation. What tools are the scientists using? And do this without sticking a video camera in their face or invading their privacy too much.

multithreaded game scripting with stackless python

THIS IS COOL! GPS Camera prototype. I was just thinking about this kind of thing earlier this week. And there is this too: Google Maps - DIY Real Time GPS Tracker

FINK-TODO: pygps is a much needed library. Parsing NEMA strings is not hard, but it is annoying. I would rather have a nice solid library do if for me!

Posted by Kurt | Permalink

09.17.2005 16:31

A more automated approach

I now have a script that works for all sgy files in a directory. It also creates the sqlite databases if they don't exists. Note the name change from Shotpoint to EnsembleNo now that the databases are based off of the sioseis converted sgy files. Now I just need to generate a sioseis file for finding the water bottom and some default gains.

#!/bin/bash
declare -ri VERBOSITY=2 # TRACE


project="Eel_River_Basin"

for file in *.sgy; do echo echo ======== $file ======== name=${file%%.sgy}

db="${file}.db"

if [ ! -f $db ]; then echo "WARNING: missing database ($db)... generating assuming SEGY REV 1" segysql.py -f $db $file --verbosity=$VERBOSITY --warn-only fi

ShotpointName=EnsembleNo minShot=`sqlite $db "select min($ShotpointName) from segyTrace"` maxShot=`sqlite $db "select max($ShotpointName) from segyTrace"` echo "Shot range: $minShot ... $maxShot"

minDelay=`sqlite $db 'SELECT min(Delay) FROM segyTrace'` maxDelay=`sqlite $db 'SELECT max(Delay) FROM segyTrace'` echo "delay range: $minDelay ... $maxDelay"

TraceSamples=`sqlite $db 'SELECT min(TraceSamples) FROM segyTrace'` SampleInterval=`sqlite $db 'select max(sampleinterval) from segyTrace'` SampleInterval=`python -c "print \"%.7f\" %($SampleInterval / 1000000.)"` echo "Sample Interval: $SampleInterval" #SampleInterval=0.000083 # Force if reading SampleInterval from xstar file.

timeStart=`python -c "print \"%0.2f\" % ($minDelay/1000.)"` timeEnd=`python -c "print ($maxDelay/1000. + $SampleInterval * $TraceSamples)"` echo "Time range: $timeStart ... $timeEnd"

pltWidth=350 # The default # Screen width / number of shots we want to see spa=`python -c "print \"%.2f\" % ($pltWidth/float($maxShot-$minShot))"` echo "Spacing: $spa"

# SPA of 0.5 showed some # FIX: how to calculate a good timescale? # time scale. The scale for the time axis in mm./second. echo makepltsegy.py --verbosity=$VERBOSITY -o $name.pltsegy -i $name.sgy \ -s $minShot -S $maxShot \ --spa=$spa --timescale=400 \ --tbi=$timeStart --tfi=$timeEnd \ --title="$project $name $minShot ... $maxShot" done

Posted by Kurt | Permalink

09.17.2005 15:31

automatic pltsegy file generation

WARNING: I released this script to the world a little early. It does not make use of the timeStart and timeEnd.

I am not quite up to writing another program to generate pltsegy files with best guess parameters. Instead, I wrote a short bash shell script. This is easier now and I will pay for it later. I tried to use the sqlite database from each xstar file as much as possible. I got thrown off by the 41 coming back in the SampleInterval field. This is really the value stored in the xstar SampleInterval field (bytes 58 and 59), but not the value to use. The actual SampleInterval is 83 (0.000083) which sioseis sets explicitly with a special case when it sees ibuf(59) .EQ. 41. Then it also sets buf(49) to 1/12000 (0.00008333), but I have not bothered to look up which field that is. ibuf is and INTEGER*2, and I am not sure what type buf is.
#!/bin/bash
# Why am I writing this in bash???
declare -ri VERBOSITY=2
project="Eel_River_Basin"
name=EEL5kL01-00001
db="${name}.xstar.db"
if [ ! -f $db ]; then
    echo "ERROR: missing database ($db)"
    exit
fi
minShot=`sqlite $db 'select min(Shotpoint) from segyTrace'`
maxShot=`sqlite $db 'select max(Shotpoint) from segyTrace'`


echo shotrange = $minShot ... $maxShot

minDelay=`sqlite $db 'SELECT min(Delay) FROM segyTrace'` maxDelay=`sqlite $db 'SELECT max(Delay) FROM segyTrace'`

# FIX: make sure min/max are the same TraceSamples=`sqlite $db 'SELECT min(TraceSamples) FROM segyTrace'`

#SampleInterval=`sqlite $db 'select max(sampleinterval) from segyTrace'` # 41 that is in the db file is NOT ok. It is 83 SampleInterval=0.000083

timeStart=`python -c "print \"%0.2f\" % ($minDelay/1000.)"` timeEnd=`python -c "print ($minDelay/1000. + $SampleInterval * $TraceSamples)"`

echo $minDelay $SampleInterval $TraceSamples

echo "Time range: $timeStart $timeEnd"

pltWidth=350 # The default

# Screen width / number of shots we want to see spa=`python -c "print \"%.2f\" % ($pltWidth/float($maxShot-$minShot))"` echo "Spacing = $spa"

# SPA of 0.5 showed some makepltsegy.py --verbosity=$VERBOSITY -o EEL5kL01-00001.pltsegy -i $name.sgy \ -s $minShot -S $maxShot \ --spa=$spa --timescale=200 \ --title="$project $name $minShot ... $maxShot"
I found a little bit more info by searching google for Jason Sara and chirp. But not much!

BTW, Jim Gardner gave me a demo of SonarWeb. Nice! I also tried Kingdom Suite, but was not able to get things going in the 20 minutes that I gave it.

I wish nanoblogger did not mangle the spacing inside of html pre blocks when I have autoformatting on!

Posted by Kurt | Permalink

09.17.2005 11:52

compression bakeoff

I just did a quick test of compression systems on seimsic data. I took two files from the EdgeTech xstar system (2 channels) which are 19MB and 164MB. My requirements were that the program be in fink. The results:
19705360 EEL5kL05.xstar


18789077 EEL5kL05.xstar-compress.Z 15711363 EEL5kL05.xstar-zip.zip 15704232 EEL5kL05.xstar-gzip.gz 13580310 EEL5kL05.xstar-7z.7z 13549235 EEL5kL05.xstar-rzip.rz 13539313 EEL5kL05.xstar-bzip2.bz2

TESTING: seismic.xstar

163843600 seismic.xstar 161645283 seismic.xstar-compress.Z 134228345 seismic.xstar-zip.zip 134142038 seismic.xstar-gzip.gz 119504153 seismic.xstar-rzip.rz 119409223 seismic.xstar-bzip2.bz2 118475932 seismic.xstar-7z.7z
The winners on size were p7za and and bzip2. The 7z was super slow, so I will be sticking to bzip2. I was surprised that rzip did not do better, but I think that would be the case if there were a lot more small files that were almost the same.
#!/bin/bash
# Testing for compression programs
infile=test0.txt
infile=EEL5kL05.xstar
infile=seismic.xstar
echo TESTING: $infile


rm -f $infile-*

for type in bzip2 gzip rzip zip compress; do cp $infile $infile-$type done

bzip2 -9 $infile-bzip2 gzip -9 $infile-gzip rzip -9 $infile-rzip zip $infile-zip.zip $infile-zip compress $infile-compress 7za a $infile-7z.7z -mx=9 $infile-7z

ls -l $infile | awk '{print $5,$9}' ls -lS $infile-*.* | awk '{print $5,$9}'

rm -f $infile-*

Posted by Kurt | Permalink

09.17.2005 08:04

What to do about python setuptutils/eggs in fink?

I fear there may be a rough road ahead for the python eggs/setuputils system in fink. An interesting discussion from June... I still don't fully understand the situation.
[Distutils] setuptools-0.4a2: Eggs, scripts, and __file__
Ryan Tomayko rtomayko at gmail.com
Tue Jun 14 00:00:56 CEST 2005


* Previous message: [Distutils] setuptools-0.4a2: Eggs, scripts, and __file__ * Next message: [Distutils] setuptools-0.4a2: Eggs, scripts, and __file__ * Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

On Jun 13, 2005, at 12:21 PM, Phillip J. Eby wrote: > Are you distributing an application, or a library? If you're > distributing a library, you don't need require() in library code. > If it's an application, you can handle your own dependencies by > force-installing the eggs in the application script directory using > EasyInstall, and then just require() your main package.

Libraries, applications, and libraries with helper scripts.

>> This should give me all of the benefits of >> eggs when I'm using them and fallback to the old-style manual >> dependency management otherwise. Does that make sense? > > Um, yeah, except I don't think you really need to fall back, just > because people have other stuff installed. The worst that's going > to happen is that you're going to force reinstallation of > dependencies they already have, just to get them into eggs. (Or > make them create .egg-info directories to tell the system the stuff > is already installed.)

That's the problem. I'm trying to figure out a general plan of attack that Linux/BSD package maintainers can adopt for python packages that want to use eggs / setuptools. Here's some numbers on how many python packages are included in a couple different distributions:

On a OS X darwinports box:

$ port list | grep -e '^py-' | wc -l 237

On a Fedora 3 box (Core + Extras):

$ yum list all | grep -e '^py' -e 'python' | wc -l 78

I don't have any debian or gentoo boxes handy but I imagine they'd weigh in somewhere around the darwinports number.

None of these packages are currently provided as eggs or with .egg- info directories when they are installed to site-packages and they have complex dependency relationships that are managed by the distribution's utility (port, yum, apt-get, emerge, etc.) This creates a problem for these packages because it means that they can not assume dependencies will always be egg managed. If they start adding require() calls to their scripts, they will break under these environments. require() is an all or nothing proposition for distributions and that means there will need to be a planned "upgrade" period or something for all packages.

As a more specific example, I contribute to two packages that are distributed with Fedora Core: python-urlgrabber and yum. yum depends on python-urlgrabber and python-elementtree. Now, if I wanted to move yum to be egg based and use require(), I would also need to ensure that all yum's dependencies are egg based. When yum (and its dependencies) are installed from RPM, they must all be in egg format (or at least provide .egg-info dirs). If not, the yum script will fail.

So a single package using require() can cause a snowball effect where many other packages would need to be upgraded to egg format as well. In time, this may be a good thing because it could accelerate adoption of eggs but for the time being it makes it really hard to use require().

> Hm. What if you created .egg directories and symlinked the > dependencies into them during your installation process? Or if > there were some way to create the .egg-info directories > automatically from packaging system databases, or from inspecting > module contents? Setuptools has some code that can look for the > setting of constants or presence of symbols in modules, without > importing them. Perhaps I could extend this somehow so that a > transitional package like yours could include additional info in > the setup script, that checks for these dependencies and tags them > somehow?

Yes, yes. Along those lines.

> Or maybe this could be done by metadata -- you put a legacy.py file > in your egg-info, and when processing your egg's dependencies, if > pkg_resources can't find a package you need, it would call a > function in legacy.py that would check for the dependency using > setuptools' inspection facilities, and return a path and a guess at > a version number. > > How does that sound?

That would solve my problem perfectly.

>> If that's the case, I might be >> able to make my scripts as simple as:: >> >> from pkg_resources import require, find_distributions >> if list(find_distributions('MyPackage')): >> > > Don't do this. find_distributions() yields distributions found in > a directory or zipfile; it doesn't take a package name, it takes a > sys.path entry.

Ahhh..

> I'm not sure exactly what you're trying to do here. If you just > want to know if your script is running from a development location > (and therefore needs to call require() to set up dependencies), > couldn't you just check for 'MyPackage.egg-info' in the sys.path[0] > (script) directory? > > e.g.: > > import sys, os > if os.path.isdir(os.path.join(sys.path[0],"MyPackage.egg-info")): > from pkg_resources import require > require("MyPackage") # ensures dependencies get processed > > If this is what you want, perhaps we can create a standard recipe > in pkg_resources, like maybe 'script_package("MyPackage")', that > only does the require if you're a development egg and not being run > from run_main(). > >> The downside to this approach is that I would have to be sure to NOT >> distribute MyPackage.egg-info with RPMs and other packages, which >> kind of rules out any phased approach to bringing egg based packaging >> to Fedora's stock RPMs. >> > > I don't know if .egg-info is a good idea for RPMs. .egg-info is > primarily intended for *development*, not deployment, because you > can't easily override a package installed with .egg-info in site- > packages. In fact, the only way you can normally override it is to > install an egg alongside the script. > > My current idea for how RPMs and other packagers should install > eggs is just to dump them in site-packages as egg files or > directories, and let people use require() or else use EasyInstall > to set the active package.

Right. But that's going to require significant lobbying and effort to get all core python packages included in a distribution migrated over to eggs. This is the root of my dilemma. The only realistic approach seems to be supporting dual egg and non-egg deployment for a little while. The legacy.py proposal is one method and I threw out a couple earlier. But yea.. I think this is the root of the problem.

> Hey, wait a second... if you can put install/uninstall scripts in > packages, couldn't installing or uninstalling an RPM ask > EasyInstall to fix up the easyinstall.pth file? This would let > packagers distribute as eggs, but without breaking users' > expectations that the package would be available to "just import". > If somebody explicitly wants to support multiversion for a package, > they can run 'EasyInstall -m PackageName' to reset it to multi- > version after installing a new version.

I think that would be great but it assumes modification to a whole lot of existing packages. Ideally, I'd like to be able to start using eggs and require() in my packages without having to convince everyone else to do so just yet. Not that I won't be trying to convince people, I just don't want to rely on other packages being eggified in Fedora Core, darwinports, etc for upcoming releases.

> EasyInstall doesn't have everything that's needed to do this yet > (no "uninstall" mode), but perhaps it's a good option to add, and > then packagers could standardize on this approach.

I'd be happy to advocate to / work with packagers once we get a basic set of best practices together. It seems like there are a lot of options here - we just need to iron out the details.

Thanks,

Ryan Tomayko

Posted by Kurt | Permalink

09.16.2005 22:35

The Lake Project

David Maisel:
... The Lake Project, published by the esteemed Nazraeli Press. This
oversized, 14"x14" book is comprised of surreal aerial images made in
the vicinity of Owens Lake, California.


Just saw Mapping Hacks by Schuyler Erle, Rich Gibson, Jo Walsh at the bookstore. Not earth shattering, but does look interesting. A little too fluffy. There is also Web Mapping by Tyler Mitchell on Amazon, but I have not gotten a chance to page through this one. The description says that it covers OpenEV, GDAL/OGR, PostGIS, and MapServer. Maybe someday soon, I will get OpenEV working on my Mac.

A rainy and foggy day in the Seacoast area.

Posted by Kurt | Permalink

09.16.2005 16:26

Batch conversion


It's lighthouse weather in Portsmouth.

I now have a script that takes all of the xstar files that I would like to use and batch processes them into standard SEGY. At first that may not sound like much. Jenna, JP, and other people have done just that. What is different here is that my script uses segyslice to work around the changes in sweep frequencies that trip up sioseis. I call this script "chunk-and-process.bash"
#!/bin/bash


# Convert all original xstar type files into # 1. chunks with uniform chirp band # 2. use sioseis to convert to standard sgy with 1 channel rm -f sioseis_tmp[0-9]*

for orig in xstar/*.xstar; do file=${orig##xstar/} name=${file%%.xstar} #echo $orig $file echo ========== $file ========== echo # Do a scary hard link ln $orig .

# Make sure we have only one frequence band per file. if [ ! -f ${name}-00001.xstar ]; then echo SLICING $name segyslice.py -d xstar -k -i $file SweepFreqStart SweepFreqEnd --verbosity=2 -x .xstar -o ${file%%.xstar} else echo no need to slice. already done fi

if [ ! -f ${name}-00001.sgy ]; then for xstar in ${name}*-[0-9][0-9][0-9][0-9]*.xstar; do #echo ./xstar2segy.bash $xstar ./xstar2segy.bash $xstar done fi

if [ ! -f ${file}.db ]; then segysql.py -d xstar $file -f $file.db fi

# # CLEANUP # rm -f $file # Remove the hard link echo echo done

for file in *-[0-9]*.xstar; do echo checking $file for db if [ ! -f $file.db ]; then segysql.py -d xstar $file -f $file.db fi done

# Just in case sioseis barfed ls -l sioseis_tmp* rm -f sioseis_tmp[0-9]*


syntax highlighted by Code2HTML, v. 0.9.1


Posted by Kurt | Permalink

09.16.2005 10:32

tow fish layback

Here is a nice little figure that I found on fish layback by NOAA. It makes it pretty clear what is going on. The tough parts usually are knowing the fish depth and the cable out. Again, this assumes the ship is driving straight and at a constant velocity in an area with no current.


Source: http://www.usace.army.mil/inet/usace-docs/eng-manuals/em1110-2-1003/c-12.pdf

I need to write segysqllayback.py to calculate the best possible guess at the fish location at time t.

Once I started including pictures in my block, I sure did go crazy with them. I think this is my personal attempt to prevent www information erosion. Not that I have any hope of succeeding since I will have to redo this blog soon.

Posted by Kurt | Permalink

09.15.2005 18:58

Google Areometer

This looks a bit like the Viz measurement tools, but not in 3D...

Google Areometer


Posted by Kurt | Permalink

09.15.2005 18:50

python geolocator 0.1

This sounds very interesting, but where is the source!?!?! Nothing like a flashy web page without any of the content.

http://cheeseshop.python.org/pypi/geolocator/0.1
  The geolocator library provides a common interface to
  location-related data from various sources and provides means to
  calculate distances between places. Currently the MaxMind country &
  city geoip data sources are supported. There is also some
  preliminary support for using GNS (GEOnet Names Server )data. For
  distance calculation, the Haversine function is used. 


The library can be useful for example to implement location-based features in different www frameworks; for an example of that, see the GeoLocation Zope / CMF / Plone package from which this library was spun off. Please note, however, that there is nothing www-specific in the library, nor does it have any external dependencies.
Where is the source?

Posted by Kurt | Permalink

09.15.2005 15:08

segy-py 0.23 - segyslice

segy-py 0.23 released:

I just tweaked segyslice.py to really solve the problem at hand. No point in getting frustrated with the whole processes. segyslice.py can now decide for you when to break between files.
segyslice.py -d xstar -k -i EEL5kL01.xstar \
  SweepFreqStart SweepFreqEnd \
  --verbosity=2 -M 1500  \
   -x .xstar -o EEL5kL01


FILE: EEL5kL01-0001.xstar SweepFreqStart 1000 SweepFreqEnd 6000 Value change: 15000 -> 6000 for key SweepFreqEnd closing file: EEL5kL01-0001.xstar opening file: EEL5kL01-1477.xstar

Posted by Kurt | Permalink

09.15.2005 14:02

emachineshop

Val pointed this out:

http://www.emachineshop.com/

You download some software, design your gadget, pick your materials and coatings, and they "print" it and send it to you using computer-controlled machining tools.

Too bad there are no linux or Mac OSX versions of their software.

Posted by Kurt | Permalink

09.15.2005 12:56

xstar trouble solved

I have now solved the impossible - icount =0 and its the same ping no error. Yeah, I think Becca or Jeff mentioned this to me quite a while ago, but now I have all the tools to more easily see what is going on. segysqldump.py now takes any field from the segyTrace table, so I can watch what I want to see. Check out Shotpoint 67233 which is made up of two traces at positions 1477 and 1478.
segysqldump.py -w 6 -d segy.db SweepLen SweepFreqStart SweepFreqEnd            


traceN X Y Min Shotpo SweepL SweepF SweepF

500 -44792 146998 36 66744 50 1000 6000 1000 -44792 146997 37 66994 50 1000 6000 Error occured here 1500 -44791 146996 38 67244 10 1000 15000 2000 -44791 146995 39 67497 10 1000 15000 2500 -44790 146994 40 67747 10 1000 15000 3000 -44790 146994 41 67997 10 1000 15000 3500 -44789 146993 42 68247 10 1000 15000 4000 -44789 146992 43 68497 10 1000 15000 4500 -44788 146991 44 68747 10 1000 15000 5000 -44788 146990 45 68997 10 1000 15000 5500 -44787 146989 47 69247 10 1000 15000 6000 -44787 146988 48 69497 10 1000 15000 6500 -44787 146987 49 69747 10 1000 15000 7000 -44786 146986 50 69997 10 1000 15000 7500 -44786 146986 51 70247 10 1000 15000 8000 -44785 146985 52 70498 10 1000 15000 8500 -44785 146984 53 70756 30 1000 15000 9000 -44784 146983 54 71006 30 1000 15000 9500 -44784 146982 55 71267 10 1000 15000 10000 -44783 146981 56 71517 10 1000 15000 10500 -44783 146980 57 71767 10 1000 15000 11000 -44782 146979 58 72017 10 1000 15000 11500 -44782 146979 59 72267 10 1000 15000 12000 -44782 146978 0 72517 10 1000 15000 12500 -44781 146977 1 72767 10 1000 15000 13000 -44781 146976 2 73017 10 1000 15000 13500 -44780 146975 3 73267 10 1000 15000
I then used my new segyslice.py to chop the file into two halves.
segyslice.py -i EEL5kL01.xstar -o EEL5kL01-0000-1476.xstar --max=1476
segyslice.py -i EEL5kL01.xstar -o EEL5kL01-1477.xstar --min=1477
Then passing those two sections through sioseis, there were no complains. That does not mean that I am out of the woods, but at least I can now say what that error message refers to. It looks like SweepLength is not the issue. Just the sweep frequency range.

Posted by Kurt | Permalink

09.15.2005 11:51

segy-py 0.22

Release segy-py 0.22:
  • segy.py: Added getEntireRawHdr, getRawTrace to allow duplicating segy
  • segyslice.py: New command to chop traces. Need more functionality
  • segysqldist.py: can now do UTM, skip zeros, fileKey ranges
  • segysqldump.py: CoordTransform, variable width, any keys as args
  • segysqlgmt.py: Don't allow scalercoord of 0. Turn zeros into ones.
  • .py: lots more --verbosity all around
I set myself the goal of writing segyslice.py this morning. Amazingly wiht python I am getting pretty good at estimating the time it takes to write chunks of functionality. That is much harder for me to estimate with C/C++.

Posted by Kurt | Permalink

09.15.2005 09:23

Trouble with Eel xstar data

I am still struggling with what is wrong the Eel data. Here is the error message that I get. Note the "impossible" just before the end.
./xstar2segy.bash yr1999day217-2244z.xstar 
converting yr1999day217-2244z.xstar to yr1999day217-2244z.sgy
./sioseis.Darwin
  SIOSEIS ver 2005.4 (20 May. 2005)(C) Regents of U.C.
  
 procs diskin xstar header diskoa end 
  
 diskin 
     format edgetech 
     ipath yr1999day217-2244z.xstar end 
 end 
  
 xstar 
    type 2 dummies 2 end 
 end 
  
 header 
      fno 0 lno 999999 ftr 0 ltr 999999 
      l3 = l1 l6 = l3 end 
 end 
  
 diskoa 
   opath yr1999day217-2244z.sgy end 
 end 
  
 end 
 ****    0 ERRORS IN THIS JOB   ****
  Dropping trace 2 due to different sample intervals.
  impossible - icount =0 and its the same ping no
Done.
I am going to try to write a segy slicer this morning to nuke traces.

Here is the lsd of the data:
lsd yr1999day217-2244z.xstar  | head
      SHOT   TR       RP    TR ID  RANGE DELAY NSAMPS    SI   YR DAY HR MIN SEC
         0     0       0     0  1      0    90   3976    40 1999 217 22  51  38
         0     1       0     0  1      0    90   3976    40 1999 217 22  51  38
         0     1       0     0  1      0    90   3976    41 1999 217 22  51  38
         0     0       0     0  1      0    90   3976    41 1999 217 22  51  38
         0     0       0     0  1      0    90   3976    41 1999 217 22  51  38
         0     1       0     0  1      0    90   3976    41 1999 217 22  51  39
         0     1       0     0  1      0    90   3976    41 1999 217 22  51  39
         0     0       0     0  1      0    90   3976    41 1999 217 22  51  39
         0     1       0     0  1      0    90   3976    41 1999 217 22  51  39

Posted by Kurt | Permalink

09.15.2005 02:50

Does a field exist in a pysqlite table?

I want to be able to test for the existance of a field in a SQL table. The segysqldump.py command can be run on any number of database files and each one can have a different layout of fields. For example, the xstar driver does not have an EnsembleNo. I want to be able to check for the existance of say EnsembleNo and if it does not exist, then I will not add it to the SELECT statement. Sqlite has a sqlite_master table that contains the CREATE command for each table. Here is how to check for the existance of a field. The spaces around the field name should prevent false matches from substrings.
#!/usr/bin/env python
import sqlite
cx = sqlite.connect('segy.db')
cu = cx.cursor()


cu.execute('select sql from sqlite_master where name = "segyTrace"') for row in cu.fetchall(): print row.keys() print row foo = row['sql'].find(' NMEAyear' ) print foo # Exists, so I get 153 (a positive int) bar = row['sql'].find(' nonexistant ') print bar # Does not exist so -1

Posted by Kurt | Permalink

09.14.2005 13:04

Comparing huntec channels

I just went through and created a side-by-side comparision on the two Huntec channels. Channel 2 is much more ragged. Here is how I created the ch2 image:
suwind < line43.ch2.su key=tracl min=4000 count=3000 > line43.ch2.4000-7000.su
sushift < line43.ch2.4000-7000.su tmin=0.510 tmax=0.866 > line43.ch2.4000-7000.nodelay.su


supsimage x2beg=5500 x2end=6350 d1num=0.01 x1beg=.61 x1end=.68 \ hbox=10 wbox=18 verbose=1 d1=.000125 \ < line43.ch2.4000-7000.nodelay.su > ps2 && gv ps2
Channel 2 is the lower frequency receiver on a streamer behind the fish. It is flapping in the breeze a bit so you can see artifacts that look the same a ship heave (looks wavy).

Posted by Kurt | Permalink

09.14.2005 11:33

working su seismic image

The problem with yesterday's image was that I was trying to look at too much of the seismic line at one. Resolution issues! When I replotted with this command, I get results that are better. However I am seeing offsets that should have been fixed by the nodelay business.
  supsimage verbose=1 d1=.000125 wbox=18 < line-4000-7000.nodelay.su  > ps
  gv ps
Then I selected a magnification of 10x and did Shft-Apple-4 to make a screen shot.


UPDATE: Duh. The delay offset problem was my fault. I had a symbolic link to the wrong file!
lrwxr-xr-x    1 schwehr  staff          23 Sep 14 11:19 line.su -> line43.ch1.4000-7000.su
I don't see the required nodelay in that filename!

Posted by Kurt | Permalink

09.13.2005 15:51

fink mac osx seismic unix (cwp-su)

I just got my first seismic unix image generated on Mac OSX. It is truely ugly, but at least that is something :)
The Integration of Multibeam Sonar Data with Huntec Sub-bottom Profile Data into a Marine GIS, 2000. [PDF]

Here is what I did...

Start off by converting segy to the internal seismic unix program. Mac OSX 10.3 PPC is bigendian, so conv=1.
# ~/x/src/density/endian
BIGENDIAN
# segyread tape=line43.sgy conv=1 endian=1 verbose=1 > line43.su


103772752 Sep 9 13:34 line43.sgy 201794624 Sep 13 14:18 line43.su
That doubled the size of my seismic data file. Yikes! Now find out the ranges of the trace header parameters and split the data into the two Huntec receiver channels.
surange < line43.su


23932 traces: tracl=(1,11966) tracr=(1,11966) fldr=(1,11966) tracf=(1,2) trid=1 sx=(364964,382927) sy=(4519354,4524110) gx=(364964,382927) gy=(4519354,4524110) delrt=(100,710) ns=2048 dt=125 year=95 day=256 hour=(19,22) minute=(0,59) sec=(0,59) timbas=2

suwind < line43.su key=tracf min=1 max=1 > line43.ch1.su suwind < line43.su key=tracf min=2 max=2 > line43.ch2.su
Now use segy-py to figure out what is closest to my cores.
segysqldist.py -X -124.50211667 -Y 40.8388500 -n 1 -u -z 10 --verbosity=3


BEST fields: fileKey, shotpoint, x, y, distance, EnsembleNo,FieldRecNo BEST: 1 0 -124.502286138 40.8382818195 0.000592915087008 0 5861

CMP = 5861

So I want to plot tracf from 4000 - 7000. Subset the data using the window command.
suwind < line43.ch1.su key=tracl min=4000 count=3000 > line43.ch1.4000-7000.su


surange < line43.ch1.4000-7000.su 3000 traces: tracl=(4000,6999) tracr=(4000,6999) fldr=(4000,6999) tracf=1 trid=1 sx=(370650,374952) sy=(4521460,4522604) gx=(370650,374952) gy=(4521460,4522604) delrt=(510,610) ns=2048 dt=125 year=95 day=256 hour=(20,21) minute=(0,59) sec=(0,59) timbas=2
Now that I have the subset to plot, I have to mush all the data into a common unit with only one delay time (dt, or time from shot until the recording starts).
# python
delrt=(510,610)
ns=2048
dt=125/100000.
tmax = delrt[1]/1000. + dt*ns
print tmax


0.866

tmin = delrt/1000. print tmin

0.510

import sys; sys.exit ('see ya')

# sushift < line43.ch1.4000-7000.su tmin=0.510 tmax=0.866 > line43.ch1.4000-7000.nodelay.su
Now I start running into problems with the CWP-SU setup in fink. This stuff is my fault, but it is a bummer that the build arch for su is so strange and there are conflicts with GMT's psimage.
# supswigb < line43.ch1.4000-7000.nodelay.su key=tracl nbpi=250 interp=1 xbox=1.0 ybox=1.2 hbox=9.0 wbox=428  > foo.ps
sh: line 1: /sw/lib/cwp-su/bin/bin/pswigb: No such file or directory


# export CWPROOT=/sw/lib/cwp-su # !sups
Now supsimage fails. I had to go do some minor hacks...
sudo -s
cd /sw/lib/cwp-su/bin
ln -s psimage _psimage 
Whoops. Well, now it works.
# supsimage < line43.ch1.4000-7000.nodelay.su  > foo.ps


# gv foo.ps
Finally I see this ugly thing, but I can see the bottom-water interface.


SUchirp at the USGS which I am pretty sure was written by Jenna Hill.

Posted by Kurt | Permalink

09.12.2005 23:00

OpenFOAM

OpenFOAM - Fun name, but is there any interest in this code at ccom?
  The OpenFOAM (Open Field Operation and Manipulation) CFD Toolbox can
  simulate anything from complex fluid flows involving chemical
  reactions, turbulence and heat transfer, to solid dynamics,
  electromagnetics and the pricing of financial options. 


The core technology of OpenFOAM is a flexible set of efficient C++ modules. These are used to build a wealth of: solvers, to simulate specific problems in engineering mechanics; utilities, to perform pre- and post-processing tasks ranging from simple data manipulations to visualisation and mesh processing; libraries, to create toolboxes that are accessible to the solvers/utilities, such as libraries of physical models.


Introduction to FireWire Device Interface Guide - Supposedly a new version, but last time I looked at this doc, it was pretty unhelpful.

Posted by Kurt | Permalink

09.12.2005 20:57

Tinting a layer in Photoshop CS

I wanted to tint the water multiple of a seismic section so that it is clear to my readers not to interpret anythin in this region. It took me a while, but I finally figured out how to do this in Photoshop CS. First, duplicate the background layer by dragging that layer to the new layer icon on the layer pane. The turn off viewing (click the eyeball) for the background. Now select the magnetic lasso - second from the top on the left. Now select and remove everything surround the area that you want to tint/highlight. Now duplicate this layer in case of messups.

Now select the top layer containing the cutout. Select Layer Style -\> Color Overlay. I used 40% opacity H 126, S 16, B85.







Nathan showed me that the image adjustments would work too. They only apply to the current layer. I tried, but was not able to achive exactly what I was hoping for.

Posted by Kurt | Permalink

09.12.2005 18:13

Mars Phoenix web site

Phoenix Mars Mission Selects Esser Design and Terralever; Top Southwest Creative Firms Tapped to Launch Web Site

  TEMPE, Ariz.--(BUSINESS WIRE)--Sept. 12, 2005--Esser Design
  (www.esserdesign.com), a leading branding and marketing firm, and
  Terralever (www.terralever.com), a top web development and
  interactive marketing strategy company, today announced that the two
  companies, in partnership, have been selected by University of
  Arizona's Phoenix Mars Mission to redevelop the program's web
  site. The Phoenix Mission is operated for NASA by the Lunar and
  Planetary Laboratory at the University of Arizona, in partnership
  with the Jet Propulsion Laboratory, Lockheed Martin and the Canadian
  Space Agency. The Mission, scheduled for launch in August 2007 and
  arrival in May 2008, is the first program in NASA's Mars Scout
  Program of competitively selected missions. Scouts are innovative
  and relatively low-cost complements to the core missions of the
  agency's Mars Exploration Program. 
...

Posted by Kurt | Permalink

09.12.2005 07:23

pysqlite2

After my brain turned to swiss cheese last night, I figured I'd take a look at sqlite3 and pysqlite2. sqlite3 is in fink, but not a new enough version for pysqlite2 (which is not in fink).

In the process of checking them out, I created these two info files for 10.3: Neither one is perfect. The sqlite3 one disables the tcl support and only builds from my command line. I was unable to build from withing fink commander. The pysqlite2 has a conflict flag with pysqlite-py, but I am not sure if that is necessary.

I ran out of steam before really trying out either. My hope is that sqlite3 is faster and has smaller database files. The sqlite2 db files are getting to be huge. The gzip/bzip2 to about 10% of their original size, but yikes! As for pysqlite2-py, I am excited about the better documentation that comes with it. pysqlite.py is poorly documented and I only know how to do what I could find simple examples of around the web. I feel like I am really not utilizing it very well.

wxOptParse puts a GUI around command line arguments. I have yet to try it, but it sounds like a win-win situation. I write normal python optparse command line interfaces (CLI) and a GUI is wrapped around them for me at no extra charge.

Posted by Kurt | Permalink

09.11.2005 17:47

seismic unix tutorial

I took a short break from dealing with the seismic data for my thesis and gave the Seismic Unix tutorial a go. I figured this is something that is still along the lines of processing my data, so I'm not wasting too much energy :)
I played around with the tsa script in Chapter 3 and had some fun. First I wanted to see how to get the generated spikes into gnuplot which needs ascii data. SU writes a binary file format and I don't want to parse that. The trick is to use suascii bare=1. The bare=1 prevents the time index column and the header from being written. I don't mind the time index, but the header confuses gnuplot.
suspike nt=$nt dt=$dt ntr=1 nspk=1 ix1=1 it1=20  | sugain scale=0.9 > spike1.data
echo -n '#' > spike1.xy
suascii < spike1.data >> spike1.xy


gnuplot plot 'spike1.xy' with lp
Then I got to the part where the tutorial plots up the results. I would have never guessed what suxwigb does, but it is pretty handy and makes a pleasing graph:

Here is the script I ended up with...
#!/bin/bash


nt=251 dt=0.001

suspike nt=$nt dt=$dt ntr=1 nspk=1 ix1=1 it1=20 | sugain scale=0.9 > spike1.data echo -n '#' > spike1.xy suascii < spike1.data >> spike1.xy

suspike nt=$nt dt=$dt ntr=1 nspk=1 ix1=1 it1=60 | sugain scale=0.6 > spike2.data suspike nt=$nt dt=$dt ntr=1 nspk=1 ix1=1 it1=120 | sugain scale=0.4 > spike3.data suspike nt=$nt dt=$dt ntr=1 nspk=1 ix1=1 it1=190 | sugain scale=0.5 > spike4.data

susum spike1.data spike2.data > a.tmp susum spike3.data spike4.data > b.tmp susum a.tmp b.tmp > spike.data rm -f [ab].tmp spike?.data

echo -n '#' > spike.xy suascii < spike.data >> spike.xy

suvibro dt=$dt tv=0.06 t1=0 t2=0.05 phz=-33 > sweep.data suascii bare=1 < sweep.data > sweep.z

suconv < spike.data sufile=sweep.data | sushift tmin=0 tmax=0.251 > conv.data suascii bare=1 < conv.data > conv.z

suxcor < conv.data sufile=conv.data | sushift tmin=0.251 tmax=0.502 > acor.data suascii bare=1 < acor.data > acor.z

suxwigb < acor.data wbox=300 hbox=500 title="Autocorrelation" xbox=10 ybox=10

Posted by Kurt | Permalink

09.11.2005 09:06

Firefox 1.5 beta 1 - SVG

Firefox 1.5 Beta 1 has SVG! I decided to be brave. I downloaded the beta and made it my default browser. Maybe I am crazy, but I wanted to give it a try. I much prefer the search feature in Firefox to the one in Safari. That Safari popup find dialog suxs.

I gave http://www.croczilla.com/svg/samples/ a try to see how the SVG support is doing. It does not work for me on the Event 1 and Event 2 cases. Still, it is about time that SVG start working!

Firefox 1.5 developer highlights by Simon Willison has more details.

Posted by Kurt | Permalink

09.11.2005 08:51

segy-py 0.21

segy-py 0.21 is not that different than 0.20, but can now drink beer.
    ChangeLog
  • segy.py: Added a traceKey field to the segyTrace DB table. Unique ID
  • segysql.py: More verbosity
  • segysqlgmt.py: --fledermaus-pts
  • segytextheader.py: --histogram to see diff between EBCDIC and ASCII
segy-py-0.21.tar.bz2

Posted by Kurt | Permalink

09.11.2005 06:51

USGS Earthquake RSS Feed

Hurray! The USGS added RSS to their Earthquake pages.

http://earthquake.usgs.gov/recenteqsww/rss.html

Magnitude 7.7 - NEW IRELAND REGION, PAPUA NEW GUINEA 2005 September 9 07:26:44 UTC

They also have CSV and XML formats here

Posted by Kurt | Permalink

09.10.2005 17:59

ebcdic vrs ascii


From this graph it is clear that [a-zA-Z0-9 ] for EBCDIC and ASCII are in very different ranges.

A little python trick to get the numberical value for a string element:
python
>>> a = "abc123"
>>> type (a)
<type 'str'>
>>> type (a[1])
<type 'str'>
>>> print a[1],ord(a[1])
b 98
>>> chr (98)
'b'
ord is the trick.

Posted by Kurt | Permalink

09.10.2005 16:57

segy-py 0.20

Just released segy-py version 0.20:
  • segysqlgmt.py: added --fledermaus, rewrote internals. Much happier.
  • segysqlgmt.py: UTM to LatLon. New CoordTransform class
  • segytextheader.py: New file. Decode ASCII or EBCDIC text headers
segy-py-0.20.tar.bz2

segytextheader.py is useful, but not exciting, for segy data files with ASCII Text File headers since less and other tools can pick off the first 3200 bytes. The big win is for getting at those EBCDIC headers. Sometimes there is critical info hinding in there.

To follow JWZ's lead...
Dear LazyWeb,


Does anyone know an easy way to distinguish (or at least guess) if a block of data (here 3200 characters) is ASCII or EBCDIC. I suppose I could do a histogram of character code frequency and it should be pretty obvious, but is there some simpler trick?

Please email me if you know something I don't (about this particular problem)!

Thanks, -kurt
BTW, I just up the number of entires on the front page (and I hope on the feeds) to 20 since I have been writing quite a few lately.

http://arstechnica.com/columns/linux/linux-20050907.ars - Developing Firefox Extensions with GNU/Linux. I am sure this is pretty much the same on Mac OSX.

Posted by Kurt | Permalink

09.10.2005 16:36

building your levy

I was just talking about how sometimes forward progress on a project can be excruciatingly slow. Working on my thesis, there are shortcuts to processing seismic data right now, but if I have to redo that particular task it will take the same amount of time. I am guessing that odds are I will be redoing it at least once if not more times and I will be doing this for other projects. Therefore, it behooves me to write decent code now instead of the quick hack. But that takes longer in the short term.

As a result of the above, I have redone the guts of segysqlgmt.py to have a CoorTransform class. This class takes all the options and a database connection in the __init__. It then sets up for calls to ct.getLonLat(x,y). That call does the right thing. I no longer have 4 copies of the logic to take a trace x,y value and make a lon,lat pair out of it. Woo hoo!

It is starting to feel like autumn is coming.

Securing Mac OS X Tiger [pdf] - as seen on slashdot. I have not dug into this document, but a quick look suggests that it is a good read for anyone using a Mac. As always, don't just blindly implement everything in a document like this. Think about the repercussions of each suggestion, then do what you think is best.

Posted by Kurt | Permalink

09.10.2005 13:57

Lew Platt passed away

Sad news today. I just heard that Lew Platt (former CEO of HP) passed away. My condolences to the family.

Former Boeing Chairman Lew Platt dead at 64 [USA Today Money]

Posted by Kurt | Permalink

09.10.2005 09:22

Using SU to teach seismic processing

While waiting for my laptop to crunch some stuff, I decided to look on the web to see what was available to read about seismic processing. I found this which looks promissing other than the lack of actual data to use with the document:

Using Seismic Un*x to Teach Seismic Processing by Thomas Benz at Michigan Tech.
  Thomas Benz wrote a Master's report on the use of Seismic Un*x in
  teaching of seismic processing. We are in the process of converting
  this document for general use, but have been asked by many people to
  make it available as soon as possible. To meet these requests, we
  have taken that report and simply converted it to Adobe Acrobat
  portable document format and are making it available at this
  site. We appreciate your comments on the material included. Seismic
  Un*x is a free software suite of programs that run under Unix on a
  wide range of platforms. It is provided by the Center for Wave
  Phenomena at the Colorado School of Mines, from their web site at
  http://www.cwp.mines.edu/cwpcodes/. 
...
  The main approach used in this report is straightforward: explain
  the principles of 2D seismic data processing and immediately use
  them in the processing of data, whether synthetic or real. The
  report starts with examples of running simple scripts, in exercises
  designed to provide some familiarity with time-series analysis. Then
  it creates a synthetic data set from a structurally-complex model
  (watch out -- this step can use a lot of CPU time), and then
  processes the shot gathers and CMP gathers from that synthetic data
  set. The report uses a proprietary data set made available to
  Michigan Tech for application of these procedures on real data. This
  data set is not currently available for release to others. 


We are hoping to obtain an appropriate 2D data set for release through the Society of Exploration Geophysicists. Ideally, this data set would consist of a hundred or so shot points, with sufficient fold to provide good resolution (say, 32 at the minimum). It would have minimal statics correction required, and exhibit some structural feature of interest.

Posted by Kurt | Permalink

09.09.2005 22:16

I need to patent something

This is all over the nerd news feeds...

6,727,830 - Time based hardware button for application launch - Filed: July 12, 2002
  In accordance with the present invention, a method and apparatus for
  launching different application functions, based on the length of
  time an application button is pressed, are provided. The method and
  apparatus for launching the application function comprises:
  detecting that an application button has been pressed; determining
  the length of time the application button has been pressed; and
  launching alternative application functions based on the length of
  time the application button was pressed. If an application button is
  pressed for a short period of time, e.g., less than one second, an
  application function, such as displaying a view is launched. For
  example, if the application is a notes application, a short button
  press displays a list of summary information for the stored
  notes. If the same application button is pressed for a long period
  of time, e.g., at least one second, an alternative application
  function is launched. Using the notes example, a new note is opened
  for a long button press. Yet a third application function can be
  launched for a multi-press (e.g., double click) of an application
  button. Using the notes example, a new note is opened with a
  predefined template, for a multi-press of an application button.
Let's see \ldots how about shaking the PDA for different functions. For a reboot, just band it on the table. To track forward a song, flip right. Track back by flipping left. Shake longer to autodial microsoft telephone support. As for their images in the patent, I can make a flow chart too if that is important.

I think the patent office needs to work on the web page for images. Not good guys. Ever heard of downsampling a preview image or a thumbnail?

Posted by Kurt | Permalink

09.09.2005 19:53

Tweaked pmag Makefiles

I just saw that Lisa released pmag-1.9 last month. I gave her some make files for it,, but they had some room for improvement. I took an hour today to merge in some ideas from other Makefile ideas that I came up with in due to segy-py developement. src/Makefile is much simpler than before. I had lots of unnecessary rules in the old version.

pmag-1.9-kurt-makes.tar.bz2 [357K]
The best parts are probably


* Edit VERSION to update to a new version (e.g. 1.9.1 or 1.10 or 2.0... whatever your pref)

* the top make files tries to help

cd src make # It tells you all the options... hopefully the discriptions are # not too cryptic :)
* Build with compiler optimizations so things go as fast as possible

make clean; make all-opt

* Make a tar of the binaries for a platform... e.g. this will make pmag-1.9-tiger.tar.bz2

make bdist PLATFORM=tiger

* Make a release for fink... this removes all binaries, .o files, and fort.xx files and builds a tar.bz2

make pmag.info scp pmag-1.9.tar.bz2 sorcerer:/Library/WebServer/Documents/software/ # then email me pmag.info
Now, when you cd in src and type make, you will see this (BTW, GNU make only!!!)
make


Welcome to pmag 1.9 by Lisa Tauxe

Options:

make all build everything make all-opt build everything for SPEED make install build everything and put in ../bin

make clean remove all build files make clean-dist cleanup in prep for a dist make real-clean nuke the dist tars and do clean/clean-dist

make sdist create a SOURCE only distribution make bdist create a BINARY only distribution

make pmag.info create a fink info package and tar for Mac OSX

Posted by Kurt | Permalink

09.09.2005 14:07

segytextheader



I just wrote a new program for segy-py called segytextheader.py. This program dumps the text file header at the beginning of a SEG-Y file. That is not that exciting since that is just the first 3200 bytes. The exciting part is that it can convert EBCDIC text headers to ASCII. Woo hoo!
segytextheader.py  ~/Desktop/HuntecLine43/line43.sgy -e




C 1 USGS MARFAC CREW NO C 2 LINE AREA MAP ID C 3 REEL NO DAY-START OF REEL YEAR OBSERVER C 4 INSTRUMENT: MUDSEIS NT MODEL SERIAL NO C 5 DATA TRACES/RECORD AUXILIARY TRACES/RECORD CDP FOLD C 6 SAMPLE INTERVAL SAMPLES/TRACE BITS/IN BYTES/SAMPLE C 7 RECORDING FORMAT FORMAT THIS REEL MEASUREMENT SYSTEM C 8 SAMPLE CODE: C 9 GAIN TYPE: C10 FILTERS: ALIAS HZ NOTCH HZ BAND - HZ SLOPE - DB/OCT C11 SOURCE: NUMBER/POINT POINT INTERVAL C12 PATTERN: LENGTH WIDTH C13 SWEEP: HZ HZ LENGTH MS CHANNEL NO TYPE C14 TAPER: MS MS TYPE C15 SPREAD: C16 GEOPHONES: C17 PATTERN: C18 TRACES SORTED BY: RECORD C19 AMPLITUDE RECOVERY: C20 MAP PROJECTION 11 C21 PROCESSING: C22 PROCESSING: C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 END EBCDIC

Posted by Kurt | Permalink

09.09.2005 13:21

Another blog map

Just got an email from blogflux telling me to check out their map service. I don't have time right now, but sounds interesting.

UTM support in segysqlgmt.py looks to be working. Thanks Jeff W!

Posted by Kurt | Permalink

09.08.2005 20:12

segy-py 0.19 released

From the ChangeLog:
  • xyzdespike.py: new program to remove easy to chop bad points
  • makepltsegy.py: added --timescale to be the same as --timscal
  • segysql.py: --verbosity=5 is like -v -v -v -v -v
  • segysqlgmt.py: --verbosity, --force-hemisphere
I have not yet started on the utm to lat,lon code. That will probably be very soon.

Posted by Kurt | Permalink

09.08.2005 19:30

mapnik python GIS

Yet more stuff for me to explore after my thesis...

mapnik
  Mapnik is an toolkit for developing GIS applications. At the core is
  a C++ shared library providing algorithms/patterns for spatial data
  access and visualization. Essentially a collection of geographic
  objects (map, layer, datasource, feature, and geometry), the library
  doesn't rely on "windowing systems" and can be deployed in any
  server environment. It is intended to play fair in a multi-threaded
  environment and is aimed primarily, but not exclusively, at
  Web-based development. High-level Python bindings (boost.python)
  facilitate rapid application development, targeting zope3, django,
  etc.
I went through the Seacoast Science Center this afternoon while at the CCOM clam bake. Nice, relaxing place. They even had a GeoZui demo to drive through the Portsmouth area.

I have been enjoying gvisit with my blog. I put just a little javascript in the links part of http://schwehr.org/blog/ and in the August archive page. I don't know how to insert the javascript into the RSS/Atom feeds of nanoblogger, but I am sure it would be easy if I tried. Recent cities:
Iowa City, Iowa  (Hi Geb!)
El Dorado, Arkansas
Barcelona, Cataluna (I really enjoyed visiting Barcelona)
Winfield, Alabama
Copenhagen, Kobenhavn

Posted by Kurt | Permalink

09.08.2005 13:03

WHOI Open House this weekend

Open House in Celebration of WHOI's 75th Anniversary


Saturday, September 10, 2005 . 10 a.m. to 4 p.m. . Woods Hole Oceanographic Institution (rain or shine)



The Woods Hole Oceanographic Institution (WHOI) is celebrating 75 years of ocean research, education, and exploration in 2005. Founded in 1930 to help advance the role of the United States in worldwide oceanographic research, WHOI has grown from a summer laboratory to a thriving, year-round, major research operation. Today the Institution has a staff and student population of nearly a thousand people working and studying on two campuses in Woods Hole, Massachusetts, on Cape Cod and at research locations around the world. It operates three large research vessels, several smaller boats, the submersible Alvin, and a fleet of deep-diving remotely operated and autonomous vehicles.

This will be WHOI's first open house in 25 years. Both the Woods Hole and Quissett campuses will be included, with shuttle buses running between them. Parking will be available on the Quissett Campus and in the village lots of various Woods Hole research institutions.

Open house features include robotic vehicles, the coastal research vessel Tioga, scientific exhibits and demonstrations, a just-published book on the institution's history, and 20 talks on subjects ranging from right whales and red tides to coastal erosion and archaeological mapping in Greek waters. An incomplete list of open house components (more are being added) appears on the web site included below.

For more information on the Open House and other 75th anniversary events, visit http://www.whoi.edu/75th/index.html.

Posted by Kurt | Permalink

09.07.2005 17:38

atacama operations

Atacama Operations - Control room in action.

Posted by Kurt | Permalink

09.07.2005 15:33

NOAA/NASA google earth

Check this out:

Global Connection - Hurricane Katrina aftermath aerial photography by R. Sargent, A. Wright, B. Dunlavey

Posted by Kurt | Permalink

09.07.2005 10:23

decent 2 for mac osx

Decent 2 for mac osx.

Lamont-Doherty (LDEO) made the NSF news site:



New Images Suggest Oceanic Crust Generated from Several Magma Sources
  Some of the highest quality images ever taken of the Earth's lower
  crust reveal that the upper and lower crust form in two distinctly
  different ways. 


"This new way of studying the ocean crust is the equivalent of a new telescope in astronomy," said Bruce Malfait, head of the National Science Foundation (NSF)'s marine geosciences section, which funded the research. "It allows us to look at Earth processes and composition at a remarkable new level of detail."

To form the images, the researchers, led by a team from Columbia University's Lamont-Doherty Earth Observatory (LDEO), analyzed sound waves bounced off structures deep in the Earth, a process similar to creating an ultrasound image. They published the results of their work in the Aug. 25 issue of the journal Nature.

The Earth's oceanic crust is formed from molten rock, or magma, located beneath mid-ocean ridges. Magma chambers located in the mid-crust are known to be responsible for generating the upper-oceanic crust. But it has so far been unclear if the lower crust is formed from the same magma source, or if it arises primarily from "magma lenses"--smaller bodies located at or near the base of the crust.

The resulting images are the first of their kind to show solidified lenses and sills--narrow lateral intrusions of magma--embedded within the crust-mantle boundary known as the Moho transition zone. The presence of such lenses and sills deep near a mid-ocean ridge suggests the lower crust is at least partially formed from several smaller sources of magma rather than from a single large source located in the middle of the crust.

"This demonstrates that the process of crustal formation is more complex than believed," said LDEO scientist and lead author of the study, Mladen Nedimovic. "It also favors the emerging view that volcanoes have a complicated plumbing system consisting of many interconnected sills and magma conduits. We still have a lot to learn about what goes on beneath the surface of the Earth."

Researchers from LDEO as well as the Scripps Institution of Oceanography and the Woods Hole Oceanographic Institution collected seismic data from the oceanic crust beneath the sea floor off the coast of Wash., Ore., and northern Calif.


A "new way of studying the ocean crust"... new way??? This is cool data, but I'd like to hear more if there is a new technique involved. I see SIO and WHOI get a mention at the bottom.

Posted by Kurt | Permalink

09.07.2005 08:50

zigbee wireless protocol

Zigbee is a wireless protocol for low power sensor to be used in home and industrial situations. There is talk about 1 AA battery lasting a couple of years on a sensor. If this succeeds and is cheap/easy to implement, this could be a huge win for science applications. Rightnow, instrumenting an area can be an expensive prospect.

Wired on Zigbee

C&C Technologies has done some New Orleans (NOLA) mapping with Lidar: http://mapper.cctechnol.com/ . This does not look like it works to me. I just see a standard google map.

Posted by Kurt | Permalink

09.06.2005 21:00

pyproj sample

I did a quick pyproj test since I would like to use it in segy-py to handle the Eel Huntec SEGY which has UTM positioning. Looks like I have a working sample and a fink info file to go with it.
Info2: <<


Package: pyproj-py%type_pkg[python] Version: 1.1 Revision: 1 Description: Projection coversions in python DescDetail: << << #http://www.cdc.noaa.gov/people/jeffrey.s.whitaker/python/pyproj.tar.gz Source: http://www.cdc.noaa.gov/people/jeffrey.s.whitaker/python/pyproj-%v.tar.gz Source-MD5: f13b2e26389de92a79e5f0efa7ecd0c4 Type: python (2.4) Depends: python%type_pkg[python], proj BuildDepend: CompileScript: << #!/bin/bash export PROJ_DIR=%p %p/bin/python%type_raw[python] setup.py build << InstallScript: << %p/bin/python%type_raw[python] setup.py install << DocFiles: README License: BSD Homepage: http://cheeseshop.python.org/pypi/pyproj/1.0 Maintainer: Kurt Schwehr <goatbar _at_ users.sourceforge.net> # Info2 <<
The tar is not named quite right on the web site, so I had to download pyproj.tar.gz change it to /sw/src/pyproj-1.1.tar.gz. Then I wrote this little python script that converts one utm point (core 1 TTN136B) from Lat/Lon to Zone 10 UTM.
#!/usr/bin/env python


from pyproj import Proj

params = {} params['proj'] = 'utm' params['zone'] = 10 p = Proj(params) print p(-120.108, 34.36116666) #765975.64 3805993.13 0
How to get all the gcc macros: gcc -arch ppc -dM -E - < /dev/null | sort

Posted by Kurt | Permalink

09.06.2005 14:20

D_FORMAT in gmt

Somehow this did not make it into my blog before, so here is a critical warning. When working with xyz data two and from gmt grds (grd2xyz and xyz2grd) use gmtset D_FORMAT = "%.9lf" so that you don't loose precision. That caused me lots of grief.

Posted by Kurt | Permalink

09.06.2005 09:30

floating point exceptions

UPDATE: THIS IS ALL WRONG... There is something not right about this!

I think that maybe catching sigfpe may be the way to go? But I wonder if that signal is even being sent on mac osx???




This does not work...

Yesterday, Jeff Gee and I worked through an interesting little problem. How do you detect floating point exceptions in a numerical program? Checking every possible point in a set of equations will be slow and make the code nearly impossible to comprehend. There are also invisible temporary variables created by the compilers that are impossible to see. Jeff started with this web page:

G77 manual - Floating-point Exception Handling

This page says to write some whacko c code with a static void __attribute__ ((constructor)). Then call feenableexcept. That call is in the headers, but I have no idea where that code is in the libraries. The final part is to compile the code with -trapfpe flag when linking. Well, g77 3.4.3 on darwin 7.9.0 (mac osx 10.3.9) does not have that flag.

After a little looking around, I wrote up a little demo program that uses some of the calls in fenv.h to check for exceptions. It appears that catching floating point exceptions is enabled by default with this setup.

check_f_except.c:
#include <fenv.h>
#include <stdio.h>


#define FALSE (0==1) #define TRUE (0==0) void check_f_except__ (int *result) { int found=FALSE;

if (fetestexcept(FE_INEXACT)) { found=TRUE; printf("underflow\n"); feclearexcept(FE_INEXACT); } if (fetestexcept(FE_DIVBYZERO)) { found=TRUE; printf("divbyzero\n"); feclearexcept(FE_DIVBYZERO); } if (fetestexcept(FE_UNDERFLOW)) { found=TRUE; printf("underflow\n"); feclearexcept(FE_UNDERFLOW); } if (fetestexcept(FE_OVERFLOW)) { found=TRUE; printf("overflow\n"); feclearexcept(FE_OVERFLOW); } if (fetestexcept(FE_INVALID)) { found=TRUE; printf("invalid\n"); feclearexcept(FE_INVALID); } if (fetestexcept(FE_ALL_EXCEPT)) { found=TRUE; printf("all\n"); feclearexcept(FE_ALL_EXCEPT); }

*result = found; }


test_fpe.f:
      double precision d


i = 999 call check_f_except(i) write (*,*) 'result = ',i

d = (1.0d+00 - 1.0d+00) i = 999 call check_f_except(i) write (*,*) 'result = ',i

end
The 999's are just markers to set a default value for i. check_f_except(i) should set i to 1 for no exception and 0 for an exception. These are due to C's concept of true and false.

underflow
divbyzero
invalid
 result =  1
 result =  0

Posted by Kurt | Permalink

09.05.2005 17:24

wireless in NOLA

Katrina Wireless Team: Donations, Equipment and People Needed:

http://freenetworks.org/ and http://cuwireless.net/ which has "Katrina: Community Wireless Rapid Response">

Models Predicted Katrina Devastation
  It predicted that 200,000 people or more would be unwilling or
  unable to heed evacuation orders and that thousands would die. It
  also predicted that people would be housed in the Superdome, that
  aid workers would find it difficult to gain access to the city as
  roads became impassable, as well as many other of the consequences
  that actually unfolded after Katrina hit this week... 

Posted by Kurt | Permalink

09.05.2005 08:29

gdb conclusion

I spent some time tracking down what I could about the state of GDB with Mac OSX 10.3.9 and 10.4.x. I have now officially given up trying to get a newer gdb in 10.3.9, but I want to document what I discovered before I move on.

The executive summary is that Apple has not merged their changes to GDB back into the mainline GDB distribution. With all the library funkiness (e.g. 2 level namespaces), I am sure it was a fair amount of work to get gdb going on Mac OSX. Integrating Mac OSX support into the mainline would leverage the work of many more people who use gdb. People like me who do not directly contribute code, could help with testing and minor patches.

I tried building the stock gdb 6.3 with --target=powerpc-apple-macosx and it built. But I got "not in executable format: File format not recognized".

I then asked around on the fink IRC channel and got pointed to Apple's OpenDarwin site. A little extra help from the list discovered the name Apple gives to their fork of gdb.
  1. Darwin
  2. DarwinSource
  3. 10.4.2
  4. gdb-384.tar.gz
2005-01-19  Jason Molenda  (jmolenda@apple.com)


* Makefile (GDB_VERSION): Update to reflect the actual date of the last FSF merge.
Maybe there will be more in the mainline cvs of gdb?

I then opened and started building gdb-384. I did a ./configure --prefix=${HOME}/darwin; make install for each of these directories in this order:
  1. mmalloc
  2. readline
  3. intl
  4. libiberty
  5. bfd
  6. opcodes
  7. binutils
  8. gdb


It worked up until the build of gdb. There are some hardwired references to 64 bit data types that are not in 10.3.9. It would have been nice to have 64 bit / 32 bit truely selectable. I am not up for digging into the macosx directory and crunching internals to gdb right now.

From the current CVS world:

http://www.gnu.org/software/gdb/current/

wget ftp://sources.redhat.com/pub/gdb/snapshots/current/gdb-6.3.50.20050905.tar.bz2

Now I go through the whole build process and when I get to the gdb section, I get
./configure --prefix=${HOME}/darwincvs 


...

long double support in compiler... yes checking for long double support in printf... yes checking for long double support in scanf... yes checking whether has __NR_tkill... no checking compiler warning flags... -Wimplicit -Wreturn-type -Wcomment -Wtrigraphs -Wformat -Wparentheses -Wpointer-arith -Wformat-nonliteral -Wunused-label -Wunused-function -Wuninitialized checking for cygwin... no checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include configure: error: "*** Gdb does not support native target powerpc-apple-darwin7.9.0"
But, ./configure --prefix=${HOME}/darwincvs --target=powerpc-apple-macosx has no such complaints.

And again, I get the same negative results...
powerpc-apple-macosx-gdb sioseis
GNU gdb 6.3.50.20050905
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host= --target=powerpc-apple-macosx"..."/Users/schwehr/projects/xcore/src/sioseis/sioseis": not in executable format: File format not recognized
Tried the smallest C program possible and got the same results.

This is even worse than with SGU's o32, n32, n64 fiasco.

An I even managed to wedge the Finder at the same time with an FTP copy from the redhat servers. Doh!



That's it. Time to go walk down to the local bagel store... The Works.




pyproj!!! Just discovered pyprojection which looks to have been around a bit longer.

FINK-TODO: Python GIS: Thuban gis viewer.

Posted by Kurt | Permalink

09.05.2005 07:08

Rendezvous/Bonjour library

Just heard about the Avahi library. Might be good for devices on a ship when DNS, shore connections, and devices come and go.
  Avahi is a system which facilitates service discovery on a local
  network -- this means that you can plug your laptop or computer into
  a network and instantly be able to view other people who you can
  chat with, find printers to print to or find files being
  shared. This kind of technology is already found in MacOS X (branded
  'Rendezvous', 'Bonjour' and sometimes 'ZeroConf') and is very
  convenient.


Avahi implements the DNS-SD over Multicast DNS. It uses D-BUS to communicate from the application to the system daemon. A system daemon is used to coordinate application efforts in caching replies, necessary to reduce noise on networks generated by protocols such as MDNS. The goals of this project are for implementation into the GNOME desktop, however that does not stop it from being used by any other applications or desktop environments as long as you have a working installation of dbus, which most modern distributions now come with by default.

Although other implementations exist (such as Howl), none exist that use fully open and free GPL-compatible code. The howl library is hindered by the APSL among other things, which makes it undesirable to some people, especially distributions such as Debian which has strict free software guidelines.
http://www.open-mpi.org/

ghetto-gps

Posted by Kurt | Permalink

09.04.2005 16:49

gdb - the gnu debugger

You know that when I bust out the debugger, I am not having the most fun. Today I am trying to figure out an error message from sioseis. I have never tried gdb on g77 code. Now I get to find out. I have not really had to dig into anything with the debugger in a major way since the last century. Back then, I was pretty good about doing things like building gdb for VxWorks and then attaching the debugger to a remote VxWorks target that was having a bad day.

I noticed a nice command that I have never seen before: finish. It continues to the end of the current function. Nice.

At the moment, I have things compiled like this:
gcc -g -O0 -Wall -Wimplicit -pedantic -W -Wstrict-prototypes \
    -Wredundant-decls -Dosx=1   -c -o shifts.o shifts.c
f77 -g -O2 -Wall   -c -o contro.o contro.f
The -O2 may get me in trouble with the fortran. Here goes:
gdb sioseis 
run < yr1999day217-2244z.xstar
Doh! Tons of errors and binary screwing up the xterm. Wow.
bt
#0  0x000eccb0 in s_copy ()
#1  0x0000a514 in getoke_ (cbufo=0xbffff4d0, nchars=0xbffff564, __g77_length_cbufo=1) at getoke.f:94
#2  0x0000610c in MAIN__ () at contro.f:352
#3  0x000e9dec in main ()
#4  0x0000236c in _start (argc=-1073744540, argv=0x3c6c0a0, envp=0x3c6bfcf) at /SourceCache/Csu/Csu-47/crt.c:267
#5  0x8fe1a278 in __dyld__dyld_start ()


break main Breakpoint 1 at 0xe9dd0 (gdb) r The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /Users/schwehr/projects/xcore/src/sioseis/sioseis < yr1999day217-2244z.xstar

Breakpoint 1, 0x000e9dd0 in main () (gdb) list 1 SUBROUTINE GETOKE(CBUFO,NCHARS) 2 c **** Watch out - getoke writes a null after the last char, 3 c so cbufo must be bigger than the number of characters 4 C 5 C GETOKE RETURNS CONSECUTIVE TOKENS (ITEMS BETWEEN A DELIMITER), ONE PER CALL,

Okay, so I can stop at main but I did not expect to see that listing. Now I feel pretty lame. I don't pass in the segy file through stdout. I am supposed to pass the scripts. No wonder it freaked out.

Maybe it would be good to show what the trouble I trying to decipher.
./xstar2segy.bash yr1999day217-2244z.xstar 
converting yr1999day217-2244z.xstar to yr1999day217-2244z.sgy
  SIOSEIS ver 2005.4 (20 May. 2005)(C) Regents of U.C. kds                       
  
 procs diskin xstar header diskoa end 
 !procs diskin  header diskoa end 
  
 diskin 
     format edgetech 
     ipath yr1999day217-2244z.xstar end 
 end 
  
 xstar 
    type 2 dummies 2 end 
 end 
  
 header 
      fno 0 lno 999999 ftr 0 ltr 999999 
      l3 = l1 l6 = l3 end 
 end 
  
 diskoa 
   opath yr1999day217-2244z.sgy end 
 end 
  
 end 
 ****    0 ERRORS IN THIS JOB   ****
  Dropping trace 2 due to different sample intervals.
  impossible - icount =0 and its the same ping no
Done.
I have prepaired a stripped down script for sioseis to see if I can trace what is happening under the hood.
(gdb) run < zscript.sioseis   
(bt) bt
No stack.
It looks like a I need a break point. This will be a lot easier from the GUD (Grand Unified Debugger) inside of emacs: M-x gdb
nm xstarex.o | grep xstarex
00000000 t ___g77_masterfun_xstarex
00002844 T _xstarex_


(gdb) break xstarex_
g77 sticks an extra _ on the end of subroutine names, henc extra _ on xstarex_. Here is an example of a straight C program that does on have the trailing _:
nm core_logger.o | grep T


00001254 T _esc_help 00000144 T _main 00000004 C _origTerm 00000c48 T _process_io 00000044 T _stablk
Now that I've set the break point at _xstarex_, it is time to run it and see how it works.
(gdb) run
(gdb) bt
#0  0x000b9600 in xstarex_ (buf=0x2877f50, lbuf=0x2877f50, ibuf=0x2877f50, nready=0x1398d0) at xstarex.f:1
#1  0x00007b68 in MAIN__ () at contro.f:1542
#2  0x000e9dec in main ()
#3  0x0000236c in _start (argc=1072604, argv=0x4, envp=0x158) at /SourceCache/Csu/Csu-47/crt.c:267
#4  0x8fe1a278 in __dyld__dyld_start ()


(gdb) up (gdb) list 1537 CALL getxstartr(buf(index1),buf(index1),buf(index1),nrdyxstar) 1538 nxstar = nxstar -1 1539 iout(i) = iout(i) -1 1540 GOTO 1010 1541 ELSE 1542 CALL xstarex( buf(index1), buf(index1), buf(index1), 1543 & nrdyxstar) 1544 iout(i) = nrdyxstar + 1 1545 nxstar = nrdyxstar 1546 IF( nrdyxstar .EQ. 0 ) GOTO 1015
I think I need to start over with -O0 since I am getting strange behavior with next steps. "FFLAGS := -g3 -O0 -Wall". In inap.f, what is an AP? I guess it is a buffer of memory - "COMMON /APMEM/AP(500000)". Is this a fortran or tape specific concept? Here is a little quote:
  If there isn't really an ap on the system and we are going to use an
  ap simulator, which uses an internal array specified in contro, make
  it very large!
I think the AP is an "array processor." Is this something for parallelizing code?

After stepping into inap, I did a finish to get back to right after the call to inap. Then to see what the local stack looks like do this:
(gdb) info locals
deglat = 0
deglong = 0
dtemp = 0
dlong = 0
dlat = 0
deltad = 0
dbuf = (0)
mlat = 0
mlong = 0
distance = 99999
deglatlast = 0
deglonglast = 0
dbub = (0, 0, 0)
depth_lat__ = 0
depth_long__ = 0
boatlat = 0
boatlong = 0
deltalat = 0
deltalong = 0
itunit = Cannot access memory at address 0x48
Now, here is where my lack of knowledge about the debugger gets me in trouble.
      CALL inap( buf(numhdr+1), numdat )
c****
c****  Treat Triton totally separately from Edgetech
c****
      write (*,*) 'type: ',type
      IF( type .EQ. 3 ) THEN




(gdb) n type: 2 (gdb) print *type Cannot access memory at address 0x34 (gdb) print *type Cannot access memory at address 0x34
Why can I add a write statement, but can't get at the type variable from within gdb? Type is a part of a common block xstar and defined as an INTEGER. I think the problem may be do to a two year old build of gdb provided by Apple with OSX 10.3.9:
gdb --version
GNU gdb 5.3-20030128 (Apple version gdb-309) (Thu Dec  4 15:41:30 GMT 2003)
The current release on http://www.gnu.org/software/gdb/download/ is 6.3.

Posted by Kurt | Permalink

09.04.2005 13:53

MGS goes into safe mode

Glitch forces Mars probe shut-off [bbc news]
  A glitch has forced Nasa's Mars Global Surveyor (MGS) spacecraft to
  shut down its science instruments. 


The spacecraft has switched into a "safe mode", in which the instruments and some other systems are turned off.

Team members are racing to get the probe out of this mode so it can photograph the presumed crash site of a US Mars mission lost in 1999.

The pictures could decide whether design changes are needed on a probe due to launch for Mars in 2007.

Next week will provide the last opportunity to take images of the crash site of Mars Polar Lander (MPL) for another two years.

Posted by Kurt | Permalink

09.04.2005 12:42

xmlstarlet

An article on xmlstarlet. Sounds like a nice tool for dealing with XML. I have been avoiding dealing with XML for quite a while now, and that is going to have to change.

xmlstarlet is in fink.

Posted by Kurt | Permalink

09.04.2005 07:19

Mac OSX BibTeX program

http://bibdesk.sourceforge.net/
  BibDesk is a graphical BibTeX-bibliography manager for Mac OS
  X. BibDesk is designed to help organize and use bibliographic
  databases in BibTeX .bib format. In addition to manual typing,
  BibDesk lets you drag & drop or cut & paste .bib files into the
  bibliographic database and automatically opens files downloaded from
  PubMed. BibDesk also keeps track of electronic copies of literature
  on your computer and allows for searching your database through
  several keys. 

Posted by Kurt | Permalink

09.03.2005 21:50

Fortran is INSANE

I just ran into the Fortran 77 ENTRY keyword. This is one of the strangest things that I have ever seen. This seems like a twisted goto. http://www.fortran.com/F77_std/rjcnf-15.html#sh-15.7
  An ENTRY statement permits a procedure reference to begin with a
  particular executable statement within the function or subroutine
  subprogram in which the ENTRY statement appears. It may appear
  anywhere within a function subprogram after the FUNCTION statement
  or within a subroutine subprogram after the SUBROUTINE statement,
  except that an ENTRY statement must not appear between a block IF
  statement and its corresponding END IF statement, or between a DO
  statement and the terminal statement of its DO-loop. 
Perhaps this is to do the equivalent to class construction? You first call the subroutine and later only use the entry?

Posted by Kurt | Permalink

09.03.2005 07:31

Kurt, the tattoo-robot

Kurt, the tattoo-robot
  Kurt is a machine with four injection needles and Chinese
  ink. Attached to the upper arm it tattoos an enduring symbol on the
  user's skin. Kurt is an extreme example of the human-machine
  interface. The intervention is aimed at rising the awareness of the
  close connection between the individual and the machine, in a bond
  as long-lasting as the drawing itself.


Google now has a Katrina mode in their map of New Oleans Google Katrina

Posted by Kurt | Permalink

09.02.2005 16:37

Katrina GoogleMap based info system

Thanks to Myche for sending me this link.

http://www.scipionus.com/
  Katrina Information Map - This map is intended for the use of people
  affected by Hurricane Katrina who have or are trying to find
  information about the status of specific locations affected by the
  storm and its aftermath. If you have information about the status of
  an area that is not yet on the map, please contribute by following
  the instructions below so that others may get that much needed
  information. 

Posted by Kurt | Permalink

09.02.2005 16:12

NOS/OCS SITREP

NOS/OCS SITREP 1230 Sept 2


Subject: NOS/OCS SITREP 1230 Sept 2

1. NRT1 has completed surveys Pensacola. Based upon NOAA surveys, USCG is opening Pensacola to 31 foot draft commercial and 34 foot draft to Naval Air Station. A gasoline tanker is due Sunday, can load deeper based upon NOAA surveys.

2. NRT2 is side scanning Gulfport to enable USCG cutter to enter on law enforcement mission. Initial report basin is clear with some ruins attached to bulkhead. At 1300 making first side scan sweep from basin out channel to GIWW.

3. NRT4 is conducting survey operations Port Fourchon. A Washington Post reporter is scheduled to ride with them tomorrow.

4. NRT2 side scan of Pascagoula yesterday discovered 6 obstructions. Information was relayed to USACE. They are planning to put divers down to investigate. NRT2 will complete side scan of Pascagoula tomorrow. Pascagoula was opened to 12 foot draft today by USCG. Gasoline inventory reported there that can be removed by barge. Aids to navigation need to be restored to open to deeper draft.

5. NRT1 will side scan Biloxi tomorrow. Power plant needs coal. Power plant projects they could be back online in a week. Also report of leaking diesel tank, spill reported contained, needs to be pumped out.

6. NANCY FOSTER ETA Mobile Monday Morning to survey outer approaches.

7. THOMAS JEFFERSON ETA depart Norfolk tomorrow 1700.

8. DAVIDSON proceeding Galveston for resupply.

Posted by Kurt | Permalink

09.02.2005 11:33

NOLA Pictures

http://www.nola-intel.org/pictures/... credit to DirectNIC.com:




Posted by Kurt | Permalink

09.02.2005 10:11

python debugging

Debugging Python Code

pyCrust and iPython look very cool!

Posted by Kurt | Permalink

09.02.2005 08:35

Gulf Coast overflight 8/31

Got this via UNH email this morning:
Subj: Aerial recon flight of storm damaged area... 
Date: 8/31/2005 1:43:00 AM Eastern Standard Time 


Flight, This was forwarded to the Vietnam Helicopter Flight Crewmember Network. Pretty amazing report. Rick Lester JOKER 94

I just got back from a 3.5 hour flight over the Mississippi Gulf Coast from Bay St. Louis to Pascagoula. Please pass this report along to others who have evacuated, and need to know.

I have no words--I'm not sure there ARE words--for what I just saw. I am in shock. The destruction of the Gulf Coast was of a level that Hurricane Camille only began to begin to approach.

Personal. Janet's and my house is gone. An oak tree from the east side is lying on top of what looks like a section of the roof. Whatever else is left is in a pile of debris at the CSX railroad tracks to the north, along with every other house in the neighborhood, save the one house next door (Archie & Margaret's). Theirs is a spanish-southwestern style built in 1925, and it used to stand out against all the other homes. Now it IS the only other home. The windows are all out, and it looks pretty bad. Grasslawn, an antibellum home on the other side, is gone.

Going down the coast from east to west...

Ocean Springs has heavy damage along the beach. I don't know how far back it goes.

Biloxi. Point Cadet is gone. The Hwy 90 bridge is gone. The old hwy bridge is gone. The railroad bridge is gone. All spans are down--every last one of them--except for the drawbridge in the middle. The Biloxi Casinos are mostly standing, but the barge from the Grand is north of hwy 90 now. Mary Mahoney's Restaurant is standing, but most of the surrounding buildings are gone.

The Seashore Manor Methodist retirement home is the only structure standing on that stretch of beach. The windows are even unbroken. The Broadwater Marina is gone. What's left of the President Casino barge is north and west, and across Hwy 90. Edgewater Mall is standing, but it has large holes in the structure, high, all along the south side. Edgewater Village strip mall is gone. Everything south of the railroad tracks has severe damage, if it's still standing. I didn't see the Back Bay area.

Gulfport. The Legacy Condominiums are standing, and apparently did quite well. Nearly everything around them is gone. The VA hospital complex did well. Most of the homes on either side of it are gone. The water went beyond the railroad tracks in multiple places near there. There is a continuous debris pile pushed up against the tracks all along what used to be Second Street. Almost every house there is gone. Downtown is mostly standing, but there has been water up to the tracks. The roofs of most of the buildings have visible damage. The Hancock Bank building and the MS Power Co building seem to have fared the best. The Baptist and Presbyterian churches looked good. I couldn't see the GPT Methodist church. The new courthouse appears to be undamaged, including the windows. The harbor is mostly gone. The roof of Marine Life is down. The shipping terminal warehouses are there, but they have debris on the roofs, indicating that they were underwater. The Grand Casino hotel (and Oasis) did very well, but the casino barge is blocking Hwy 90 to the west. The homes in West Gulfport did better than on the east side, but only for a space. Approaching Long Beach it gets worse quickly.

Keesler AFB and the Gulfport CBC. One hangar at Keesler looks bad. The rest of those structures look intact from where we were flying.

Long Beach. Everything from about 1000' south of the RR tracks is gone. The Baptist Church is standing, but gutted. St. Thomas has parts standing, but it is mostly gone. USM Gulf park looks pretty good, and it is the only structure on that section of Beach. The Methodist Church is standing, and the New Life Center looks good. The roofs look good. Water came up as high as the house next door to the Associate Pastor's parsonage. Everything south of Magnolia Street is gone. North of Magnolia Street, there is heavy damage up to about 1000' of the tracks. On my old street of Buena Vista Dr., my old house is the first one standing. It appears from the air to have had water up to the second story. The High School, Middle School, and Reeves Middle School appear undamaged. Harper McCaughan is hurt, but I couldn't see how bad. It probably had water, and it is about at where the survival line forms. North LB did much better, but there was lots of roof damage. Pecan Park seems to have fared the best. The Wolf River is flooded so badly I couldn't see any structures above water. It is up to within a couple of feet of the I-10 bridge--enough that I worry for the integrity of the bridge. The harbor is gone. Every structure in the vicinity of the harbor is gone.

Pass Christian. The Wal Mart is standing, but it has been underwater. Some downtown buildings are standing. St Anne's is there, but it has had water over it. From the LB line westward, everything south of Second Street is gone. The only exception was Scenic Drive, where about half of the houses are standing. From Downtown west I saw nothing standing anywhere in Pass Christian. The only houses I saw standing in West Pass were the newer Ones on the North Side, near the Bay of St. Louis, and those two new millionaire acres-looking houses on the beach about halfway to Pass Marianne. The DuPont site is there, but we didn't fly north far enough to assess.

The Hwy 90 bridge over the Bay of St. Louis is down. Every span. The railroad bridge is down. Every span.

Bay St. Louis appears to have had water in the downtown area. Most of the buildings are standing, but most have roof damage. All the homes southwest of the downtown area, along the beach road, are gone. The homes west of the beach road had the heaviest roof damage I saw anywhere except in East Biloxi.

Waveland. We didn't fly all the way to Waveland, but I could see down the beach road quite a ways, and I saw nothing standing.

Other. Hwy 90 is washed out in sections all along the coast, from Biloxi to Bay St. Louis. Huge sand drifts obscure many more sections of pavement. There is a lot more natural sand along the beach, maybe another 500-1000'. Ship Island is mostly gone. There is a clump of trees on a sand bar on the east, and there is a sand bar on the west. Fort Massachusetts is there, but has sand berms about 15' high along the southwest side. Cat Island has a new shape. It doesn't have "fingers" any more. It is just a continuous stretch, like Ship Island used to be, only with trees.

My estimates. Based on the debris lines and what I know of the geography of the MS Gulf Coast, the tides were indeed in the 30-foot range, all the way from Bay St. Louis to Biloxi. Based on the damage I saw to roofs, and to structures unaffected by water, the winds would have had to be greater than 100 knots, possibly as great as 140 knots. I couldn't see looting/looters, but I could see the opportunity for it. The casualty numbers, when they come in, will be staggering.

In closing. I have never seen any manner of destruction like this. It is bad in Biloxi and Gulfport...as bad as anything I saw after Hurricane Camille in 1969. The devastation of Pass Christian is indescribable. The news reporting only scratches the surface. In my opinion, based on my considerable life experience, the federal government should declare martial law, and rush every possible measure of aid to this area.

Janet and I are praying for the survivors on the ground there. Please join us. I will report more later.

Posted by Kurt | Permalink

09.01.2005 16:24

NOLA web cam

The web cam on the interdictor site is currently down, but I found this on that seems to be updating.



WAFB web cam

Posted by Kurt | Permalink

09.01.2005 13:08

3.26 / gal in durham, nh

Driving through Durham, NH today, I saw gas is $3.26/gal for regular. Yikes. On CNN, they showed a gas station down south with over $6/gal. Time for people to start conserving rather than panicking.

http://www.livejournal.com/users/interdictor/ live journal blog from the CBD in New Orleans.

Posted by Kurt | Permalink