04.30.2005 13:08
Mars rover stuck for a bit
Opportunity Mars Rover Stuck in Sand
Researchers Drill Historic Hole In Atlantic Ocean Floor
Tiger has ACL's! Wonder if that will work with network mounted volumes? I still want AFS for group projects.
View the earth from satellites - not a real image. Just a synthetic view from it's location.
Researchers Drill Historic Hole In Atlantic Ocean Floor
Tiger has ACL's! Wonder if that will work with network mounted volumes? I still want AFS for group projects.
View the earth from satellites - not a real image. Just a synthetic view from it's location.
04.29.2005 16:38
Fink is ready for 10.4
I can't say that I helped out at all with this nor have I tested any
of my packages. The core guys on the fink team ROCK! The Fink
and Tiger announcement.
Fink is ready for OS X 10.4! There are several ways you can update: A binary installer will be available within a few weeks, for binary-only users. For users of the stable tree, we recommend that you delete your current fink with sudo rm -Rf /sw and then "bootstrap" an installation of fink-0.23.9 using fink-0.23.9.tar.gz. After running bootstrap.sh in that directory, you'll need to run "fink selfupdate". For users of the unstable tree, you may be able to upgrade just by installing fink-0.24.5. Be sure to reinstall this fink package ("fink reinstall fink") after upgrading to 10.4.It will be a while before I get anywhere near tiger. But I can't wait.
04.28.2005 20:11
Lots of mac links
With 10.4 coming out tomorrow, there are lots of mac links going by.
I'm not really reading any of this now. But they look interesting!
AuthomatorWorld - Mac Scripting
aimsniff for debugging aim robots.
Practical Common lisp. cdr, cdr, cdr, garbage collect.
AuthomatorWorld - Mac Scripting
aimsniff for debugging aim robots.
Practical Common lisp. cdr, cdr, cdr, garbage collect.
04.28.2005 15:42
Perl Cookbook in Python
Perl Cookbook in Python by the PLEAC Project.
Take a look at PLEAC - Programming Language Examples Alike Cookbook. I have never heard of the Merd language before. From their list, here is what I have programmed in before (no statement as to my skill level):
Take a look at PLEAC - Programming Language Examples Alike Cookbook. I have never heard of the Merd language before. From their list, here is what I have programmed in before (no statement as to my skill level):
perl, python, ada, tcl, ocaml (grr), java, commonlisp, c++, php, nasm.Too many languages. How do you choose a language? Me, it comes from being force to try some of them, but I Dan Christian and I both found python interesting at about the same time. How the heck did I decide to go for python? All I can remember is that Tcl was getting very frustrating for Marsokhod developement back in 96/97, so we knew we needed something better.
04.28.2005 12:24
artechnica 21 page review of OSX 10.4
I don't have time to read this, but it looks like a serious
review of OSX 10.4: Mac OS X 10.4
Tiger - By John Siracusa
04.28.2005 10:40
Copy of movie and go to jail for 3 years
New
law cracks down on P2P pirates. This is getting out of control.
Three years for one illegal movie copy even with no downloads.
This bill is necessary to ensure that all those involved in the production of a film, from the director to the set carpenter, are not cheated."The "set carpenter"!?!?!?! You have to be kidding. That guy gets paid no matter what and he does not make any royalties. We need IP (copyright&patent) reform with a brain. Not this JUNK.
04.28.2005 06:03
link - python parsing and...
Wow! A nice rainy day in San Diego.
Using python re for lexical analysis.
Python indenting with stack frame - not like I understand how this one works, but very cool!
Using python re for lexical analysis.
Python indenting with stack frame - not like I understand how this one works, but very cool!
04.27.2005 18:08
Aqsis - REYES Renderman renderer
Another thing to add to fink:
Aqsis is a high quality, photorealistic, 3D rendering solution. It complies with the Renderman interface standard defined by Pixar.iPod diagnostic
Aqsis comprises a command line rendering tool, a tool for compiling shaders in the RSL language, a tool for preparing textures for optimal use, and various developer libraries to enable integration with third party tools.
04.27.2005 16:48
Mac laptop issues
I spoke too soon about all my laptop rough edges going away. Yesterday
I had the power shut off again where I had to unplug and plug back
into the wall. This morning I had a runaway updatedb that had sort
filling up my hard disk by dumping files in /var/tmp. And now
wireless went down for no good reason again. Maybe I should switch
for Airport Express from the Linksys 54G. So now I get to reboot.
Doh!
04.27.2005 16:10
Making an xcore photo description file
I am going back through my older data generating xpd (xcore
description files) so that I can put photos next to some of my new
measurements for TTN136B. Here are some notes on how I am currently
making these files. This is not the best way, but it works for now.
This is for piston core 2 from TTN136b (a.k.a. ttn136b-2p or 02PC)
I start by using the ImageMagick program identify. Identify gives the size of the image so that we can setup the coordinate frame in the next step.
Warning, try not to make too many mistakes. Erasing points has a tendency to crash g3data later on when saving. I have not found time to track down this bug.
When done selecting points, select Export point data. Clock on "Export data file file" and enter 2-g3data.dat. Then press the Print button. Strange, but does the trick. Here is what the data file looks like when I did it:
For completeness, here is the python script that takes the clicks and converts them into an xpd file. Not the most exciting program, nor is the documentation any good, but python makes this easy to do!
This is for piston core 2 from TTN136b (a.k.a. ttn136b-2p or 02PC)
I start by using the ImageMagick program identify. Identify gives the size of the image so that we can setup the coordinate frame in the next step.
identify 02pcArchivesBW.jpg 02pcArchivesBW.jpg JPEG 1935x2874 PseudoClass 256c 1.1mb 0.420u 0:01I then subtract one from the width and hight. Those go into a Makefile entry for processing these images as the WIDTH2 and HEIGHT2
WIDTH2 := 1934 # 1935 HEIGHT2 := 2873 # 2874 designate-points-2: 2p.pgm designate-instructions g3data -scroll -coords 0 ${HEIGHT2} ${WIDTH2} 0 $< -scale 1 02pcArchivesBW.jpg: wget http://schwehr.org/TTN136B/Data/CorePhotos/02pcArchivesBW.jpg 2p.pgm: 02pcArchivesBW.jpg convert 02pcArchivesBW.jpg 2p.pgm 2p-gray-total.png: 2p.pgm 2p.xpd processCore $< 2p.xpd 2p-gray convert 2p-gray-total.pgm 2p-gray-total.png open -a /Applications/Adobe\ Photoshop\ CS/Adobe\ Photoshop\ CS.app 2p-gray-total.pngThe next step is to run make desinate-points-2. This starts g3data with a pre-defined coordinate frame for the image. Go through and click first on the top right corner of all the n*10 cm ticks (0,10,...,140,150) for the left ruler and then the right ruler. Make sure to go from 0..150 in order. Then for each section click on the four corners starting with the bottom left and going counter clockwise. Leave out the empty liner or edges unless you really want them to be a part of your core photo.
Warning, try not to make too many mistakes. Erasing points has a tendency to crash g3data later on when saving. I have not found time to track down this bug.
When done selecting points, select Export point data. Clock on "Export data file file" and enter 2-g3data.dat. Then press the Print button. Strange, but does the trick. Here is what the data file looks like when I did it:
348 293 350 443 350 593 351 743 352 893 353 1044 352 1193 352 1343 351 1493 351 1643 350 1793 348 1943 346 2095 344 2245 343 2396 340 2545 1736 285 1736 434 1736 583 1736 732 1737 881 1738 1031 1739 1180 1741 1330 1743 1479 1744 1630 1746 1780 1747 1930 1749 2080 1750 2229 1752 2379 1754 2526 383 1241 531 1237 537 304 388 303 624 2484 779 2485 773 287 620 288 861 2519 1014 2520 1006 280 856 278 1103 2573 1255 2575 1255 286 1102 285 1301 554 1457 553 1455 286 1300 290 1300 2353 1456 2354 1460 605 1307 602 1536 2402 1692 2402 1675 288 1523 287Now use my little python script to create an xpd file that processCore needs:
./xpd_from_g3data.py 2-g3data.dat 2p.xpdAfter adding ls -l, md5, and identify comments to the end, here is what 2p.xpd looks like:
#XCore-v1.0 -*- shell-script -*- # Core Description File - coordinates in the image. # Kurt Schwehr # ./xpd_from_g3data.py # File format: # SecNum llx lly lrx lry urx ury ulx uly # MISSING SecNum LengthCMUse the makefile to fire off processCore:
###################################################################### SECTIONS # Always missing section 0. No such thing MISSING 0 -1 1 383 1241 531 1237 537 304 388 303 2 624 2484 779 2485 773 287 620 288 3 861 2519 1014 2520 1006 280 856 278 4 1103 2573 1255 2575 1255 286 1102 285 5 1301 554 1457 553 1455 286 1300 290 6 1300 2353 1456 2354 1460 605 1307 602 7 1536 2402 1692 2402 1675 288 1523 287 END SECTIONS
###################################################################### LEFT SCALE 0 348 293 10 350 443 20 350 593 30 351 743 40 352 893 50 353 1044 60 352 1193 70 352 1343 80 351 1493 90 351 1643 100 350 1793 110 348 1943 120 346 2095 130 344 2245 140 343 2396 150 340 2545 END LEFT SCALE
###################################################################### RIGHT SCALE 0 1736 285 10 1736 434 20 1736 583 30 1736 732 40 1737 881 50 1738 1031 60 1739 1180 70 1741 1330 80 1743 1479 90 1744 1630 100 1746 1780 110 1747 1930 120 1749 2080 130 1750 2229 140 1752 2379 150 1754 2526 END RIGHT SCALE
# ls-l: 1139788 Feb 10 2003 02pcArchivesBW.jpg # MD5 (02pcArchivesBW.jpg) = 3e3f174b175c6443d7409ed05d7ba8eb # identify: 02pcArchivesBW.jpg JPEG 1935x2874 PseudoClass 256c 1.1mb 0.430u 0:01 # wget http://schwehr.org/TTN136B/Data/CorePhotos/02pcArchivesBW.jpg
make 2p-gray-total.pngThat last line should open the new png image in Photoshop for you to look at.
processCore 2p.pgm 2p.xpd 2p-gray P5 255 Found Missing: MISSING 0 -1 cm/pix l,r: 0.066607 0.0669322
PROCESSING ---------- Doing Section 0 Doing Section 1 Doing Section 2 Doing Section 3 Doing Section 4 Doing Section 5 Doing Section 6 Doing Section 7 ToAveFile: pixelsPerCMLeft = 0.066607 Length of core in pixels: 11793 Length of core in cm: 785.497 numSections: 8 convert 2p-gray-total.pgm 2p-gray-total.png open -a /Applications/Adobe\ Photoshop\ CS/Adobe\ Photoshop\ CS.app 2p-gray-total.png
For completeness, here is the python script that takes the clicks and converts them into an xpd file. Not the most exciting program, nor is the documentation any good, but python makes this easy to do!
#!/usr/bin/env python
""" Take all the points from g3data clicking on the left ruler, right ruler, and sections to produce an xpd file.
This is for TTN136B Nov 6-11th 2001.
$Id: xpd_from_g3data.py,v 1.2 2005/04/27 23:40:40 schwehr Exp $
Copyright (C) 2005 Kurt Schwehr. GPL """
__author__ = "Kurt Schwehr"
import sys
def readRuler(file): ruler=[] count = 0 for line in file: if '#' == line[0]: continue # skip comments x,y = line.split() x = int(float(x)) y = int(float(y)) ruler.append((count,x,y)) count += 10 if count > 150: break # All done return ruler
def readSections(file): """ Does not handle missing sections """ sections=[] secCount=1 # Never have a section 0... how very non-cs like pointCount=0 # which point for the current section points=[] for line in file: if '#' == line[0]: continue # skip comments x,y= line.split() x = int(float(x)) y = int(float(y)) points.append((x,y)) pointCount += 1 if pointCount==4: # Add the end of one section, so save it sections.append((secCount,points)) secCount += 1 pointCount=0 points=[] if 0!=len(points): print "ERROR: expecting an even multiple of 4 for sections" print len(points) print sections print points sys.exit("I give up") return sections
def writeSections(file,sections): out.write("\n######################################################################\n") out.write("SECTIONS\n") out.write("# Always missing section 0. No such thing\n") out.write("MISSING 0 -1\n") for sec in sections: print "SEC = ",sec out.write(str(sec[0])) for point in sec[1]: out.write(" "+str(point[0])+" "+str(point[1])) out.write("\n") out.write("END SECTIONS\n")
def writeScale(file,scaleStr,scale): out.write("\n######################################################################\n") out.write(scaleStr+" SCALE\n") for items in scale: print items out.write(str(items[0])+" "+str(items[1])+" "+str(items[2])+"\n") out.write("END "+scaleStr+" SCALE\n")
if __name__ == "__main__": file = open(sys.argv[1]) left = readRuler(file) right = readRuler(file) print len(left),left,"\n\n" print len(right),right assert(16==len(left)) assert(16==len(right))
sections = readSections(file) print "\nsections",sections,"\n\n"
out = open(sys.argv[2],"w") out.write("#XCore-v1.0 -*- shell-script -*-\n") out.write("# Core Description File - coordinates in the image.\n") out.write("# " +__author__+ "\n") out.write("# " +__file__+"\n") out.write("# File format:\n") out.write("# SecNum llx lly lrx lry urx ury ulx uly\n") out.write("# MISSING SecNum LengthCM\n") out.write("\n")
writeSections(out,sections) writeScale(out,"LEFT",left) writeScale(out,"RIGHT",right)
04.27.2005 13:52
The Planets class at UCSD
I went to my 2nd planets class the year to see how it is going and
hear about Venus. The class is looking great. Catherine and Bridget
are doing a fantastic job. I really wanted to see the Interactive
Technologies remotes work and I got my wish. They seemed to work
really well. This is a class I would have killed for as an undergrad.
How well do you know python part 5. Took me a minute, but wow. That could really frustrate a programmer with mysterous hangs.
More twisted stuff for when I get time
Weird perched rock on Mars.
NASA goes to sf.net. Now how about putting Viz and the Stereopipeline there? Java PathFinder - press release
How well do you know python part 5. Took me a minute, but wow. That could really frustrate a programmer with mysterous hangs.
More twisted stuff for when I get time
Weird perched rock on Mars.
NASA goes to sf.net. Now how about putting Viz and the Stereopipeline there? Java PathFinder - press release
Java Pathfinder was used to detect inconsistencies in the executive software for the K9 Rover at NASA Ames," Korsmeyer said. The K9 rover is a six-wheeled, solar-powered rover developed jointly at NASA Ames and NASA's Jet Propulsion Laboratory (JPL), Pasadena, Calif.Eek. Java on K9? I like that better than lisp.
04.27.2005 09:56
Fink for OSX 10.4
I am just now seeing the 10.4-transitional fink tree comming down
through CVS. I will be avoiding 10.4 until after AGU. So it will be
late June that I try this stuff out and I need to find a machine that
I can mess with that is not my laptop or server.
04.27.2005 07:31
Gulf of Mexico low oxygen zone
'Dead
Zone' Area In Gulf Could Be Increasing, Researchers Say
A tutorial for Quixote which is a python Web application framework.
A tutorial for Quixote which is a python Web application framework.
04.26.2005 15:02
Dr. Bonnie Becker
I went to Bonnie Becker's thesis defense this morning. She did a
great job. As a non-biologist, I felt like I understood the issues
and techniques of tracking the southern California muscle population.
That is really neat that you can track the source of the juvenile
planktonic form by the trace elements in the juvenile shell embedded
in the base of the adult shell.
Leonardo is another python based weblog/wiki type thing. I saw this back when looking for something to suggest to Lisa.
Unix trick of the day: GNU grep has a recursive option that I did not know about.
Sparkplotting - small graphs designed to be inlined with text. Kinda cool examples.
Toggling Safari's inline handling of PDFs...
Ted Blackman's company: Common Point
Leonardo is another python based weblog/wiki type thing. I saw this back when looking for something to suggest to Lisa.
Unix trick of the day: GNU grep has a recursive option that I did not know about.
-r, --recursive Read all files under each directory, recursively; this is equiv- alent to the -d recurse option.peterbe has a little python script to help with grep by nicely showing the context. Or you can just do grep -Hn -A4. Not as pretty, but similiar results. Probably want a slightly different option than -A, but that is the one I remember off the top of my head.
Sparkplotting - small graphs designed to be inlined with text. Kinda cool examples.
Toggling Safari's inline handling of PDFs...
defaults write com.apple.Safari WebKitOmitPDFSupport -bool YES defaults write com.apple.Safari WebKitOmitPDFSupport -bool NOI don't seem to have this key on my account...
defaults read com.apple.Safari WebKitOmitPDFSupport -bool The domain/default pair of (com.apple.Safari, WebKitOmitPDFSupport) does not existRemove certain entries from the Apple menu
Ted Blackman's company: Common Point
04.25.2005 21:33
misc links
San Diego's Mayor Dick Murphy resigned today. He will be out mid July.
New linksys BIOS for WRT54G
Integrating Twisted reactor with IPython - I should really learn twisted and ipython sometime in the future.
A Brief Look at ModPython - use mod_python instead of mod_perl.
Adding switch to python
Open Robotics Peripheral Platform - ORPP
New linksys BIOS for WRT54G
Integrating Twisted reactor with IPython - I should really learn twisted and ipython sometime in the future.
A Brief Look at ModPython - use mod_python instead of mod_perl.
Adding switch to python
Open Robotics Peripheral Platform - ORPP
04.25.2005 06:41
ivtools (not the ps/xfig drawing prog)
Peciva (fiv dot vutbr dot cz) has done a port of Open
Inventor Tools. I don't have the time right now to look through
it, but it would be great to have the old SGI tools working again.
vAddVP, ivcat, ivfix, ivinfo, ivnorm, ivperf, ivview, longToInt32, ivvrml
vAddVP, ivcat, ivfix, ivinfo, ivnorm, ivperf, ivview, longToInt32, ivvrml
04.24.2005 20:04
Interesting articles in Geology
Hopefully these links work!
Here are a couple interesting articles (to me at least) from the latest Geology:
Here are a couple interesting articles (to me at least) from the latest Geology:
- Kent et al - 60 k.y. record of extension across the western boundary of the Basin and Range province: Estimate of slip rates from offset shoreline terraces and a catastrophic slide beneath Lake Tahoe. Driscol and Mayer are also on this one.
- Parnel et al - Thermal alteration of organic matter in an impact crater and the duration of postimpact heating. Pascal Lee is on this one.
- Levi et alPaleomagnetism-based limits on earthquake magnitudes in northwestern metropolitan Los Angeles, California, USA
- Novosel Reduced magnetization produced by increased methane flux at a gas hydrate vent
- Yu and Gee - Spinel in Martian meteorite SaU 008: implications for Martian magnetism
04.24.2005 10:34
Inheritance in python, Space Shuttle flash website
My general idea now is to put all the OpenInventor ASCII basics into
the GenIV class. Then for each application domain, authors can
subclass GenIV and provide additional high level constructs. For me
right now, I am creating the GenXCore subclass for sediment cores. I
will then have things for marking regions in the core, making
texturemapped rectangles for core photos, etc. If someone wants to do
some other domain, say ships, houses, multibeam terrains, etc., then
that would be great!
Here is the code for just the bare minimum system. I have not done inheritance/subclassing design before in python. It is way simpler than with C++. The only thing I am missing is the destructor. I do not use that often in C++, it can occasionally pay off big. In C++ the main (and unexciting) use for destructors is deleting new'ed data structures, but in python, the garbage collector (gc) or some similiar type mechanism is taking care of memory for us.
This is pretty long, but I think it makes a nice simple use of inheritance to add and isolate functionality. It might bite me in the long run, but I like it so far.
Here is the code for just the bare minimum system. I have not done inheritance/subclassing design before in python. It is way simpler than with C++. The only thing I am missing is the destructor. I do not use that often in C++, it can occasionally pay off big. In C++ the main (and unexciting) use for destructors is deleting new'ed data structures, but in python, the garbage collector (gc) or some similiar type mechanism is taking care of memory for us.
This is pretty long, but I think it makes a nice simple use of inheritance to add and isolate functionality. It might bite me in the long run, but I like it so far.
#!/usr/bin/env python """ CORE Utilities for generating OpenInventor ASCII files Copyright (C) 2005 Kurt Schwehr. GPL Version 2 """NASA has gone cheese ball. Flash web site: NASA's Return to Flight. How about designing something new that has some potential and is not so darn expensive. Maybe aiming for simple and redundant would be better? This looks like NASA is too hard to try to look "cool." The space shuttles and space station are amazing accomplishments, but they are a big drag on space exploration. Then again, it is clear that space is not a US priority since we just hit $300 billion for invading Afghanistan and Iraq and killed 1500 soldiers so far since 2001. In the same time, NASA spent something like $60 billion and lost 7 people.
import os # os.remove() import sys # sys.exit() import string import platform # system information like mac_ver() import datetime # for date.today()
red = [1,0,0]
class GenIV: """ Class that handles generating OpenInventor 2.1/Coin ASCII geometry files. The class tracks indenation for you and provides helpers for both low level and high level constructs.
Most methods for this class emit IV geometry into the open file handle. """ def __init__(self,filename="tmp.iv"): self.ivFile = open(filename,"w") self.indentChar=' ' # Could also set this to '\t' self.indentLevel=0
def header(self): """ Write an OpenInventor header """ self.write("#Inventor V2.1 ascii\n") self.write("# Date: "+str(datetime.date.today())) self.write("# PWD: "+os.getcwd()) self.write("# os: "+str(os.uname()[0])) self.write("# osver: "+str(os.uname()[2])) self.write("# OSX ver: "+platform.mac_ver()[0]) self.write("")
def indent(self,numlevels=1): self.indentLevel += numlevels
def unindent(self,numlevels=1): self.indentLevel -= numlevels if numlevels < 0: numlevels = 0
def write(self,string="\n",newline=True): """ Write a string to the open IV file. Appends a newline unless you tell it not to do that. Handles indenting in the process. """ pad="" for i in range(self.indentLevel): pad += self.indentChar self.ivFile.write(pad) if newline: outString = string + "\n" else: outString = string self.ivFile.write(outString)
def comment(self,string="#"): self.write("# "+string)
def beginSeparator(self,comment=None): """Begin a separator block and increase indentation""" if comment: self.write("Separator { ",newline=False) self.comment(comment) else: self.write("Separator {") self.indent()
def endSeparator(self,comment=None): """End the last separator and unindent""" self.unindent() if comment: self.write("} ",newline=False) self.comment("End Separator: "+comment) else: self.write("} # End Separator")
def baseColor(self, color): """ Write a basecolor node color - [r,g,b] list or tuple - red, green, blue must be in the range of [0..1] """ s=" " r=0; g=1; b=2 self.write("BaseColor {rgb ["+str(color[r])+s+str(color[g])+s+str(color[b])+"]}")
###################################################################### class GenXCore(GenIV): """Create XCore Open Inventor ascii geometry files""" def __init__(self,filename="tmp.iv"): GenIV.__init__(self,filename) self.header() def markRegions(self,layerList,width=10, color=red): """ layerlist - list of range tuples to be marked e.g. [(74,76),(82,84),(104,105), (120,120.5) ] """ self.beginSeparator("markRegions") self.baseColor(color) for layer in layerList: top = str(layer[0]); bot = str(layer[1]) self.write("Coordinate3 { point [ -"+str(width/2)+" 0 -"+str(top)+", "+str(width/2)+" 0.0 -"+str(top)+",") self.write(" -"+str(width/2)+" 0 -"+str(bot)+", "+str(width/2)+" 0.0 -"+str(bot)+" ] }") self.write("") self.write("IndexedFaceSet { coordIndex [ 2, 1, 0, -1, 2, 3, 1, -1 ]}") self.endSeparator("markRegions")
###################################################################### if __name__ == '__main__': iv1 = GenIV("1.iv") iv1.header() iv1.indent() iv1.comment("indent1") iv1.indent() iv1.comment("indent2") iv1.unindent(2) iv1.comment("hello") iv1.beginSeparator() iv1.comment("in sep") iv1.endSeparator()
xc1 = GenXCore("3.iv") xc1.markRegions([(1,10),(150,200)])
04.24.2005 07:20
Amaretto
Amaretto is one of those things that I have seen and used quite a few
times, bu t I never stopped to think about what is it until waiting in
line of the Little Italy pizza place behind the deli/grocery store.
So I asked Google: define:Amaretto
- A liqueur with a distinct flavor of almonds, though it's often made with apricot pit kernels.
- A liqueur with the flavor of almonds (although it is often made from the kernels of apricot pits).
04.23.2005 19:37
NASA Shuttle, OSX menu bar items
From the Mom news wire: From
bad to worse? NASA in culture conflict since Columbia:
www.command-tab.com seems like an interesting blog for Mac OSX (and Xbox if I had one and had time to play with it).
- "Everything is about return to flight and nothing is about return to right ... return to the right culture," says Dr. Jon Clark, a NASA neurologist who lost his astronaut-wife aboard Columbia.
- "NASA is making solid progress," notes the behavioral science company hired to improve the space agency's culture.
- "We haven't really changed the way we're doing business and making decisions, so we're headed down the same road we've been on," says former space shuttle commander James Wetherbee, who quit NASA out of frustration in January.
- "We've made great strides. Now, it is one of those things that you never reach perfection and you've got to continue to work on every day," says deputy shuttle program manager Wayne Hale, who perhaps more than anybody at NASA has confronted its long-lived, deep-rooted culture.
www.command-tab.com seems like an interesting blog for Mac OSX (and Xbox if I had one and had time to play with it).
04.23.2005 08:32
python xcore
Yesterday I used the first python version of xcore to show data to
Neal. It works ok, but is pretty rough. The goal was to pound out
the code as quickly as possible. The biggest annoyances were lots
calls to open/close and handling indenting. I spent about half an
hour reworking things into a class that hid those issues and I think
this will pay off very quickly.
I had hoped to be able to do something like Schmidt did with grabbing semaphores in a scope. He had it so that in ACE/Tao, to grab a lock, you created a GrabLock instance and passed the lock handle. Then when you left that scope, the GrabLock destructor would free the lock. I was a great idea for OpenInventor group objects like switches, group, and separator nodes. In C++ that would go something like this:
I had hoped to be able to do something like Schmidt did with grabbing semaphores in a scope. He had it so that in ACE/Tao, to grab a lock, you created a GrabLock instance and passed the lock handle. Then when you left that scope, the GrabLock destructor would free the lock. I was a great idea for OpenInventor group objects like switches, group, and separator nodes. In C++ that would go something like this:
lots of code ... { AddSeparator sep(ivfile) add lots of stuff to ivfile } // Here sep gets destroyed and the destructor closes the sepAlas, python is not conducive to lots of random scoping, so this is not so useful. Here is my GenIV class so far. It only makes headers and comments so far. But you can see that it is easy to tweak the indent character(s).
#!/usr/bin/env python """ Utilities for generating OpenInventor ASCII files $Id: xcore.py,v 1.6 2005/04/23 14:58:23 schwehr Exp schwehr $ COPYRIGHT: Copyright (C) 2005 Kurt Schwehr. GPL Version 2 """When I run ./xcore.py && cat 1.iv here is what I get:
import os # os.remove() import sys # sys.exit() import platform # system information like mac_ver() import datetime # for date.today()
red = [1,0,0] green = [0,1,0] blue = [0,0,1]
__author__ = "Kurt Schwehr" __revision__ = "$Id: xcore.py,v 1.6 2005/04/23 14:58:23 schwehr Exp schwehr $"
class GenIV: """ Class that handles generating OpenInventor 2.1/Coin ASCII geometry files. The class tracks indenation for you and provides helpers for both low level and high level constructs.
Most methods for this class emit IV geometry into the open file handle. """ indentChar=' ' # Could also set this to '\t' indentLevel=0 def __init__(self,filename="tmp.iv"): self.ivFile = open(filename,"w") def header(self): """ Write an OpenInventor header """ self.ivFile.write("#Inventor V2.1 ascii\n\n") self.ivFile.write("# Created by: "+__file__+"\n") self.ivFile.write("# Author: "+__author__+"\n") self.ivFile.write("# Revision: "+__revision__+"\n") self.ivFile.write("# Date: "+str(datetime.date.today())+"\n") self.ivFile.write("# PWD: "+os.getcwd()+"\n") self.ivFile.write("# os: "+str(os.uname()[0])+"\n") self.ivFile.write("# host: "+str(os.uname()[1])+"\n") self.ivFile.write("# osver: "+str(os.uname()[2])+"\n") self.ivFile.write("# kernel: "+str(os.uname()[3])+"\n") self.ivFile.write("# arch: "+str(os.uname()[4])+"\n") self.ivFile.write("# OSX ver: "+platform.mac_ver()[0]+"\n") self.ivFile.write("\n") def indent(self,numlevels=1): self.indentLevel += numlevels def unindent(self,numlevels=1): self.indentLevel -= numlevels if numlevels < 0: numlevels = 0 def write(self,string="\n"): """Write a string to the open IV file""" pad="" for i in range(self.indentLevel): pad += self.indentChar self.ivFile.write(pad) self.ivFile.write(string) def comment(self,string="#"): self.write("# "+string+"\n") ###################################################################### if __name__ == '__main__': iv1 = GenIV("1.iv") iv1.header() iv1.comment("hello") iv1.indent() iv1.comment("indent1") iv1.indent() iv1.comment("indent2") iv1.unindent(2) iv1.comment("hello")
#Inventor V2.1 ascii
# Created by: ./tmp.py # Author: Kurt Schwehr # Revision: $Id: xcore.py,v 1.6 2005/04/23 14:58:23 schwehr Exp schwehr $ # Date: 2005-04-23 # PWD: /Users/schwehr/projects/xcore/doc/BPSIO-04/iv-new # os: Darwin # host: CatBoxII # osver: 7.9.0 # kernel: Darwin Kernel Version 7.9.0: Wed Mar 30 20:11:17 PST 2005; root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC # arch: Power Macintosh # OSX ver: 10.3.9
# hello # indent1 # indent2 # hello
04.22.2005 18:49
unittest for sqlite database
Just a quick note first. The problem of my laptop randomly loosing
power from the charger has gone away. When this happened, it was not
the connector to the laptop. I had to unplug it from the wall and
then plug it back in. Then it would go back to using wall power. I
am not sure when this stopped happing. Probably a couple months ago.
Maybe it was 10.3.8?
Here is my very simple unittest that checks my sqlite database. Not much to it so far. It definitely needs more consistency checks. I did find my bug. I had a bad entry in the section number for a core in the section table. It was just one letter to fix, once I knew where it was!
Here is my very simple unittest that checks my sqlite database. Not much to it so far. It definitely needs more consistency checks. I did find my bug. I had a bad entry in the section number for a core in the section table. It was just one letter to fix, once I knew where it was!
#!/usr/bin/env python
import unittest import ttn136b import sqlite # for DepthLookup
class Ttn136bTests(unittest.TestCase): """ Test the TTN136B sqlite database """ def setUp(self): """ Prep the database and lookup table for the tests in this group""" self.cx = sqlite.connect (ttn136b.dbFileName); self.cu = self.cx.cursor() self.depthLookup = ttn136b.DepthLookup(self.cx) def testSectionOne(self): """ Check the simplest cases for samples that are in the first section """ self.cu.execute("SELECT depth FROM ams WHERE samplename='ttn136b-2ta-s1-003';") self.assertEqual(3,(self.cu.fetchone())['depth']) def testSectionOneDepthLookup(self): """ Check the simplest cases for samples that are in the first section """ self.assertEqual(3,self.depthLookup.lookup("ttn136b-2ta-s1-003"))
if __name__ == '__main__': print "Starting to test the data base" unittest.main()
04.22.2005 14:45
debugging python
Doh. I found a couple buglets in my python code today. I figured it
is time to write some more test cases into my database handler. Here
are some useful notes.
First, I have never tried the python debugger before. pdb is in some ways very like gdb, but embedding commands to the debugger caught me off guard. Once this code drops into the debugger, gdb like commands work.
Here is the pdb tutorial where I got this from: Test-Driven Development in Python. There is a follow on More Test-Driven Development in Python
There also looks to be some good info here at the Agile Testing Blog. There is coverage of all sorts of tools including unittest, doctest, pytest, FitNesse, and lots of other stuff that is totally new to me.
What I really want now is to figure out how to connect to the database before all the tests get run. Otherwise every single test will have to connect, create a cursor, do the test, and finally nuke the cursor and the connection.
Found it! setUp and tearDown handle pre and post testing needs. From the python documentation: 5.3.1 Basic example
First, I have never tried the python debugger before. pdb is in some ways very like gdb, but embedding commands to the debugger caught me off guard. Once this code drops into the debugger, gdb like commands work.
#!/usr/bin/env python # epdb1.py -- experiment with the Python debugger, pdb import pdb a = "aaa" pdb.set_trace() b = "bbb" c = "ccc" final = a + b + c print finalThen just type python epdb1.py. Then I use n for next, p for print, l for list, and c for continue.
> /Users/schwehr/Desktop/epdb1.py(6)?() -> b = "bbb" (Pdb) n > /Users/schwehr/Desktop/epdb1.py(7)?() -> c = "ccc" (Pdb) print b bbb (Pdb) l 2 # epdb1.py -- experiment with the Python debugger, pdb 3 import pdb 4 a = "aaa" 5 pdb.set_trace() 6 b = "bbb" 7 -> c = "ccc" 8 final = a + b + c 9 print final [EOF] (Pdb) c aaabbbcccPretty easy, but using pdf.set_trace() is a little strange to me. Is there an equivalent in C/C++?
Here is the pdb tutorial where I got this from: Test-Driven Development in Python. There is a follow on More Test-Driven Development in Python
There also looks to be some good info here at the Agile Testing Blog. There is coverage of all sorts of tools including unittest, doctest, pytest, FitNesse, and lots of other stuff that is totally new to me.
What I really want now is to figure out how to connect to the database before all the tests get run. Otherwise every single test will have to connect, create a cursor, do the test, and finally nuke the cursor and the connection.
Found it! setUp and tearDown handle pre and post testing needs. From the python documentation: 5.3.1 Basic example
04.22.2005 07:30
TTN136B - sampling 2TA S1 and S2
This week, I sampled the two archive halves of TTN136B-2TA. Here are
the photos from sampling.
2005Apr18-TA-S1 2005Apr18-TA-S2
04.21.2005 17:52
gcc-4.0, xcore goes pythonic
GCC-4.0 was released
yesterday. As always, I am sure this is both good and bad. New
features and faster code, but it will be a while before OSX/Darwin
catch up, I'm sure. I am sure that the Tree-SSA work will make a huge
improvement to optimization work. Wish I could say that I helped
out... but of I haven't ever had the privilege of sending a bug report
or patch in. GCC is very impressive. I wish my compiler class had
looked at least a little at GCC instead of doing Module-2, which have
not seen before or after taking Ulman's class.
Changes!
Today's project has been getting the BPSIO-2004/Santa Barbara data into OpenInventor. Rewriting xcore in python is going super fast. What took me 2 weeks in 2002, got done in a couple hours today with python. So much easier to parse simple files and not having to worry about STL makes life super easy. Add to that pysqlite and it is development at light speed.
Changes!
Today's project has been getting the BPSIO-2004/Santa Barbara data into OpenInventor. Rewriting xcore in python is going super fast. What took me 2 weeks in 2002, got done in a couple hours today with python. So much easier to parse simple files and not having to worry about STL makes life super easy. Add to that pysqlite and it is development at light speed.
04.21.2005 17:48
python doctest
Just yesterday, I noticed python's doctest module and realized what a
really excellent idea it is. It is the perfect compliment to pyunit.
The idea is that you put examples with answers in your module's doc
strings. doctest then goes in, finds these examples, and verifies
that they work as advertized. Here is a super small example to get
started with that I call dc1.py:
#!/usr/bin/env pythonThen run it like this:
def square(x): """ >>> square(2) 4 """ return x*x
def _test(): import doctest doctest.testmod()
if __name__ == "__main__": _test()
chmod +x dc1.py ./dc1.py -vThe -v is for verbose mode. Here is what verbose mode should give you showing that everything is all happy:
Trying: square(2) Expecting: 4 ok 2 items had no tests: __main__ __main__._test 1 items passed all tests: 1 tests in __main__.square 1 tests in 3 items. 1 passed and 0 failed. Test passed.To learn more read on here
04.21.2005 10:21
Troubles with Flo the 2G magnetometer
First, a fun tips and tricks article on Safari
features
Yesterday afternoon, I walked into the paleomag lab to find Jason, Jeff, and Lisa discussing how to deal with a problem with Flo the 2G magnetometer. Here is the story from when I came in to the situation at about 1:30.
The story up to this point is that Jason did the usual yearly absorbers (is that the right word?) change out for Flo yesterday morning. This is not easy, but it also is not super hard. It is awkward working in behind the old white shelves to get the helium coolant loop lines off. The pumps and absorbers are between the outer wall and the shield room wall through the door that goes nowhere. Before my time, Jeff and Lisa had replaced the flex lines with copper tubing when trying to debug a mysterious problem (I think this was around 96 or 97). The copper tubing is twisted up in a crazy pattern to get it to the right ports. This put a lot of pressure on the connector for Flo's pump which was on the bottom of the rack of three. After Jason did the change out of the adsorber, there was a leak that dumped the pressure from 250 PSI to 40 PSI and may have let air into the cold head that is at the other end of all this. The cold head goes into flow and is a piston that removes heat from inside the dewar vacuum chamber. The problem is that this system gets down to 20 Kelvin, so any air that gets in will bring in water that will freeze solid when it gets that cold, thereby seizing the piston.
The for of us, plus Josh began debugging the system. We used a tank of 99.999% grade helium (they have been using research grade helium for the last couple years for this system) to test the lines and then to blow out what ever was in them with a puffer valve. All of the lines seemed fine, holding their pressure. Then we brought the whole compressor into the main lab room and tested it. It seemed to behave okay with the only problem being the pressure gage on the unit is really dirty and acts sticky. Someone had to sit on the until for the gage to move and match the gage on the manifold.
We when ripped out most of the white shelves to get better access into the system. We tossed the old Bubba compressor that was on the top shelf and put the current Flo compressor on the top instead of the bottom. That should make it easier to work on!
We then flipped the crazy tangle of copper tubing upside down and used the roof rail to suspend it all. We then carefully bent the tubing so that the connectors were not under stress. This was a little scary since we were using our hands and not a pipe bender. But, none of the copper tubing collapsed.
We then hooked the one line of the compressor to the cold head (which one??? This is where it gets confusing!). We blew more helium through the system and out a puffer on the opposite connector of the cold head. We ran the compressor without the return side hooked up (is that right?) with the helium tank supplying the compressor. It made a nasty freight train noise. We shut it off, bled the system and tried again. The nasty noise gradually went away.
Then we hooked the whole thing up to give it a run. We were at a static pressure of 250 on the compressor. When it was turned on, I saw the pressure jump up (dial to the right about 40 degrees) to what I think was 300 PSI (not sure about this) and there was a loud pop from the cold head. I was looking at the compressor gage and not in the room at the time, but I heard the pop. We shut the whole thing off. Total time running was about 10 seconds.
Then I wondered if we had things hooked up backwards. We think it was indeed backwards. The labeling is very confusing and tracing the copper tubes through all the loops is a little crazy. We switched the system and triple checked the lines.
Then we turned it on and got no nasty bang. We could here the motor running in the cold head, but I don't think the piston was moving. It did not have the same set of noises as I remember.
At this point, the helium bleed indicator on the side of the wood cabinet was at 80 (I think?). We left the system running and I went off to measure on the kappabridge.
Hopefully all of the above is accurate. That is all from memory.
Oh, I was finally able to get my new Garbage CD from the post office. It sucks when about 1000 people all have their mail stolen from their apartment mailboxes all at the same time. The postal people get really cranky and obstinate. I am just about to put the CD on and see what I think.
Emacs question... M-# is calc? What is that?
Yesterday afternoon, I walked into the paleomag lab to find Jason, Jeff, and Lisa discussing how to deal with a problem with Flo the 2G magnetometer. Here is the story from when I came in to the situation at about 1:30.
The story up to this point is that Jason did the usual yearly absorbers (is that the right word?) change out for Flo yesterday morning. This is not easy, but it also is not super hard. It is awkward working in behind the old white shelves to get the helium coolant loop lines off. The pumps and absorbers are between the outer wall and the shield room wall through the door that goes nowhere. Before my time, Jeff and Lisa had replaced the flex lines with copper tubing when trying to debug a mysterious problem (I think this was around 96 or 97). The copper tubing is twisted up in a crazy pattern to get it to the right ports. This put a lot of pressure on the connector for Flo's pump which was on the bottom of the rack of three. After Jason did the change out of the adsorber, there was a leak that dumped the pressure from 250 PSI to 40 PSI and may have let air into the cold head that is at the other end of all this. The cold head goes into flow and is a piston that removes heat from inside the dewar vacuum chamber. The problem is that this system gets down to 20 Kelvin, so any air that gets in will bring in water that will freeze solid when it gets that cold, thereby seizing the piston.
The for of us, plus Josh began debugging the system. We used a tank of 99.999% grade helium (they have been using research grade helium for the last couple years for this system) to test the lines and then to blow out what ever was in them with a puffer valve. All of the lines seemed fine, holding their pressure. Then we brought the whole compressor into the main lab room and tested it. It seemed to behave okay with the only problem being the pressure gage on the unit is really dirty and acts sticky. Someone had to sit on the until for the gage to move and match the gage on the manifold.
We when ripped out most of the white shelves to get better access into the system. We tossed the old Bubba compressor that was on the top shelf and put the current Flo compressor on the top instead of the bottom. That should make it easier to work on!
We then flipped the crazy tangle of copper tubing upside down and used the roof rail to suspend it all. We then carefully bent the tubing so that the connectors were not under stress. This was a little scary since we were using our hands and not a pipe bender. But, none of the copper tubing collapsed.
We then hooked the one line of the compressor to the cold head (which one??? This is where it gets confusing!). We blew more helium through the system and out a puffer on the opposite connector of the cold head. We ran the compressor without the return side hooked up (is that right?) with the helium tank supplying the compressor. It made a nasty freight train noise. We shut it off, bled the system and tried again. The nasty noise gradually went away.
Then we hooked the whole thing up to give it a run. We were at a static pressure of 250 on the compressor. When it was turned on, I saw the pressure jump up (dial to the right about 40 degrees) to what I think was 300 PSI (not sure about this) and there was a loud pop from the cold head. I was looking at the compressor gage and not in the room at the time, but I heard the pop. We shut the whole thing off. Total time running was about 10 seconds.
Then I wondered if we had things hooked up backwards. We think it was indeed backwards. The labeling is very confusing and tracing the copper tubes through all the loops is a little crazy. We switched the system and triple checked the lines.
Then we turned it on and got no nasty bang. We could here the motor running in the cold head, but I don't think the piston was moving. It did not have the same set of noises as I remember.
At this point, the helium bleed indicator on the side of the wood cabinet was at 80 (I think?). We left the system running and I went off to measure on the kappabridge.
Hopefully all of the above is accurate. That is all from memory.
Oh, I was finally able to get my new Garbage CD from the post office. It sucks when about 1000 people all have their mail stolen from their apartment mailboxes all at the same time. The postal people get really cranky and obstinate. I am just about to put the CD on and see what I think.
Emacs question... M-# is calc? What is that?
04.21.2005 08:54
python metaclasses, iblog, ynp bacteria, matplotlib
Lisa mentioned the idea iBlog for blogging since MovableType seems
like it really sucks. I'll be sticking with nanoblogger, but if you
don't mind laying out $20, iBlog looks pretty slick. This is the
first time that I have seen costs for software that were listed in US
Dollars and Indian Rupees.
I though geourl.org would be cooler. Turns out you have to tell their server where your site is.
Neat story on osnews that I should read when I get more time (when is that?): A Brief Tutorial on Reverse Engineering OS X. This is an article by a guy who created Desktop Manager, so he has to figure out how the API works and changes for talking to the Aqua CoreGraphics framework.
There was an new bacteria discovered in Norris Geyser basin in the last 2 years: Extreme life discovery in Yellowstone bodes well for astrobiologists
I should also read this blog entry on Python metaclasses more carefully. I have never really noticed stuff on metaclasses before. Being able to control how classes evaluate (not just instances) could be handy.
An interesing article on matplotlib. Looks like it can do some stuff that pygnuplot has trouble with (especially pie charts).
I though geourl.org would be cooler. Turns out you have to tell their server where your site is.
Neat story on osnews that I should read when I get more time (when is that?): A Brief Tutorial on Reverse Engineering OS X. This is an article by a guy who created Desktop Manager, so he has to figure out how the API works and changes for talking to the Aqua CoreGraphics framework.
There was an new bacteria discovered in Norris Geyser basin in the last 2 years: Extreme life discovery in Yellowstone bodes well for astrobiologists
I should also read this blog entry on Python metaclasses more carefully. I have never really noticed stuff on metaclasses before. Being able to control how classes evaluate (not just instances) could be handy.
An interesing article on matplotlib. Looks like it can do some stuff that pygnuplot has trouble with (especially pie charts).
04.20.2005 09:26
AppleJack - mac repair tool
This
article talks about AppleJack, which might be
a good utility to fix an unhappy mac.
Another NASA story. Ths one about the Demonstration of Autonomous Rendezvous Technology (DART) spacecraft: On Orbit Anomaly Ends DART Mission Early
Antarctic news: B15A ran into the Drygalski Ice Tongue
Another NASA story. Ths one about the Demonstration of Autonomous Rendezvous Technology (DART) spacecraft: On Orbit Anomaly Ends DART Mission Early
Antarctic news: B15A ran into the Drygalski Ice Tongue
04.19.2005 09:28
Possible cracked machine running 10.3.9
It is possible that one of our computers around here was cracked
(thankfully not one of mine). I didn't find out about this until it
was shipped off to the bookstore to be fixed so I was not able to do a
tripwire md5 sum type analysis, nmap port scan, and a process table
dump. Here are the symptoms that I heard about:
Stopped web serving Able to ping but not log in remotely When you log in locally, it would give the background image and that was it.I don't know if it would have been possible to get in via single user mode, but that is what I would have tried. This could be either a hack or possibly just some file corruption. Not enough info to know which. One suspect is that this machine was running MovableType which seems like a pretty buggy and rough program. It ends up adding a lot of CGI programs and that may be how someone got in. If it was a hack, then whoever did it was pretty clumsy to mess up a machine that way. Maybe a botched rootkit attempt?
04.18.2005 13:39
Python doc trick
I need to try out this decorator trick to making args appear in the
__doc__ string with python:
Decorator for automatic inclusion of function definition in __doc__I really need to figure out a better solution of python documentation. pydoc does not handle arguments and returns as nicely as doxygen.
04.18.2005 08:22
Safari Blog
Dave Hayatt is a developer on the Safari team. You might want to
check out his weblog
for insite into Safari development.
I hear that the SUID and SGID bits for scripts in OSX 10.3.9 have been disabled. Compiled programs with these bits still work, so never fear... sudo still works. Are there any critical scripts for osx that need these bits? I don't know of any right now.
I hear that the SUID and SGID bits for scripts in OSX 10.3.9 have been disabled. Compiled programs with these bits still work, so never fear... sudo still works. Are there any critical scripts for osx that need these bits? I don't know of any right now.
04.17.2005 14:30
10.3.9 wireless and Apollo 13
Anyone else having wireless troubles with 10.3.9? Every couple hours
today I loose the ability to see my basestation or any of my
neighbors. A reboot solves this, but that is NOT fun. The syslog
does not say much:
Apr 17 14:08:22 localhost kernel: AirPort: Link DOWN Apr 17 14:08:22 localhost configd[89]: AppleTalk shutdown Apr 17 14:08:22 localhost configd[89]: AppleTalk shutdown complete Apr 17 14:08:26 localhost configd[89]: posting notification com.apple.system.config.network_change Apr 17 14:08:26 localhost mach_init[2]: Server 0 in bootstrap d03 uid 0: "/usr/sbin/lookupd": exited as a result of signal 1 [pid 490] Apr 17 14:09:57 localhost kernel: AirPort: Link DOWN (out-of-range)
A nice link from slashdot about the Apollo 13 troubles in IEEE Spectrum: Apollo 13, We Have a Solution by Stephen Cass.Rather than hurried improvisation, saving the crew of Apollo 13 took years of preparation.
04.15.2005 18:54
OSX 10.3.9
Right now I am downloading 10.3.9. One thing about Apple that I don't
like is that it is hard to get a good quality changelog for these
things. I know they do not want to overload the average user with
details, but how about a link for us developer folks? I'd like to
know about things like changes in apache, bind, python, gcc, etc.
Also of interest is the impending release of gcc 4.0. GCC 4.0 RC1 Available
Here is a funny quote from winsupersite:
Ummm... adding 64 bit to an OS is not the equivalent to a service pack. Wait! Is it 2005 or 2006? I remember when we got a row of Dec Aphla's in Sweet Hall at Stanford in about 1994/5 (I can't remember exactly when). Those machines were 64bit... althrough they did spend all day swapping even when no one was logged in. Still, I can't believe it has taken consumer OSes 10 years to catch up to Linux and Ultix from the middle of last decade.
Oh drat. It looks like I have to buy a new version of quicktime pro for Tiger. And it sounds like no iMovie, iPhoto, iTunes... you have to be kidding!
Also of interest is the impending release of gcc 4.0. GCC 4.0 RC1 Available
Here is a funny quote from winsupersite:
Contrary to Apple's hyperbolic claims of "200 new features," Mac OS X 10.4 Tiger includes, in my opinion, only two major new features, Spotlight and Dashboard, and both were clearly influenced by other existing products and services. In this section, we'll examine both of these major new features.
Ummm... adding 64 bit to an OS is not the equivalent to a service pack. Wait! Is it 2005 or 2006? I remember when we got a row of Dec Aphla's in Sweet Hall at Stanford in about 1994/5 (I can't remember exactly when). Those machines were 64bit... althrough they did spend all day swapping even when no one was logged in. Still, I can't believe it has taken consumer OSes 10 years to catch up to Linux and Ultix from the middle of last decade.
Oh drat. It looks like I have to buy a new version of quicktime pro for Tiger. And it sounds like no iMovie, iPhoto, iTunes... you have to be kidding!
Contrary to a popular misconception, Mac OS X 10.4 "Tiger" does not include Apple's vaunted iLife '05 applications--iMovie, iPhoto, iDVD, iTunes, and Garage Band--nor does it include the iWork '05 productivity applications, which include Pages (a weird word processing/page publishing hybrid) and Keynote (a presentation package). Tiger also does not include the AppleWorks productivity suite, an aging set of applications that is somewhat similar to Microsoft Works. You do get most of these applications--but not the iWork suite--when you purchase a new Macintosh, however.
04.15.2005 03:54
IODP MOHO Attempt
I did not realize Donna Blackman is a Co-I on the MOHO IODP leg:
Scientists Aboard Drilling Vessel Recover Rocks From Earth's Crust Far Below Seafloor
Scientists Aboard Drilling Vessel Recover Rocks From Earth's Crust Far Below Seafloor
04.14.2005 14:50
Pivy
Arg. Another cool sounding project that I would like to try out and
maybe add to fink. pivy is a
python binding for Coin. Back at NASA Ames, Laurent and I really
wanted to do this, but we ended up with Viz instead.
04.14.2005 09:31
Directory of Open Access Journals
Check out the Directory of Open Access
Journals. There are a lot of journals that I never heard of, but
there are some useful ones in there.
04.13.2005 20:56
MS Remote Desktop Connection for Mac
Microsoft has a Remote
Desctop Connection Client for Mac. Not that I have any PC's that
I would want to connect to, but it's there if I should need it.
There is a new version of Coin 2.4.0 out.
There is a new version of Coin 2.4.0 out.
04.13.2005 16:13
netsaint is nagios
I always forget the new name for NetSaint: Nagios. This is a great tool for
monitoring systems. Here is an ONLamp article on monitoring
a raid array. I really wish we had this for our SGI raid arrays.
I guess that is what we get for using proprietary systems. Too bad
Nagios is not in fink. Alex had this setup at etool and is was
fantastic. The UCSD Chemistry folks us it too.
04.13.2005 10:12
Processing xray photos continued
Now that I am back from being out sick, here is the continuation of
processing xray photos. This is a quick run through of assembling the
photos and adjusting them so you can actually see some details. This
assumes that you are comfortable with working with Photoshop CS
layers.
The first step is to use the plastic pegs to line up the xray plates. Each plate is a layer. Use the ruler tool (under the eye dropper) to measure out the 10cm distance between two pegs. Drag the ruler down to the bottom peg of a section. Then pull a guide down from the ruler to mark where the next peg will be. Then select the layer for the plate below the current plate. Use the "Move Tool" to drag the lower plate into place. This process will look something like this screenshot:
Once you have placed all the plate sections into place, you will have what looks like a continuous core. Use the core liner sides to match up the left-right position. Now zoom all the way out so you can see the while core. Then select just the vertical extent actually used by your core image with the Retangular Marquee Tool and use Image->Crop function to reduce the size of the image. A large image will use more memory and go slower, so you want the smallest possible, but make sure to leave space on the left for scratch space that will be used later. Here is a image of cropping to the core's extent.
Next, we want the whole core image in one layer. This will delete unused overlay area and save more memory. In the layer pallet (F7), left click the arrow in the top right of the pane. Then select "Flatten Image"
Now give yourself a working layer of this image. You will keep one behind as a backup/original and one in front that gets your level adjustments. In the layer panel, drag the background down to the new layer icon (looks like a turning page) and drop the layer on this icon to copy the layer.
Now you get to actually start looking at the imagry in a way that you can see core features. Core each block of the core, select the region inside of the pegs and do an "Auto Levels". If you leave out the pegs, this usually does a good job of giving a quick look.
Here are the results I get from the auto leveling of a plate.
You can see that this does not give the best results for the whole area. It is often useful to level just a small area by hand. Select a region on that background/backup layer with the Rectangular Marquee Tool. Copy it (Apple-C) and then paste it into a new layer (Apple-V). Drag this layer up the layer panel to the top. Then use the Move Tool to place the image directly to the left of it's position. Now select the inside of this region with the Marquee Tool and use Image->Adjustments->Levels to tweak it by hand.
You should now see the Levels pane with a histogram of the pixel values.
Grab the outer two dark sliders right below the histogram and pull them in to the main part of the histogram. Also make sure that the Preview checkbox is activated. Then try moving the gray center slider to the right to see if you can see more in the preview. Your preview should look something like this.
When you select OK, Photoshop will rerender your adjust region in full display resolution and you will see more. So try this a few times if the preview does not look so hot. The final may be much better.
The above is what I do before going through and describing the xradiogram of the core in my note file. I then greate notes something like this:
The first step is to use the plastic pegs to line up the xray plates. Each plate is a layer. Use the ruler tool (under the eye dropper) to measure out the 10cm distance between two pegs. Drag the ruler down to the bottom peg of a section. Then pull a guide down from the ruler to mark where the next peg will be. Then select the layer for the plate below the current plate. Use the "Move Tool" to drag the lower plate into place. This process will look something like this screenshot:
Once you have placed all the plate sections into place, you will have what looks like a continuous core. Use the core liner sides to match up the left-right position. Now zoom all the way out so you can see the while core. Then select just the vertical extent actually used by your core image with the Retangular Marquee Tool and use Image->Crop function to reduce the size of the image. A large image will use more memory and go slower, so you want the smallest possible, but make sure to leave space on the left for scratch space that will be used later. Here is a image of cropping to the core's extent.
Next, we want the whole core image in one layer. This will delete unused overlay area and save more memory. In the layer pallet (F7), left click the arrow in the top right of the pane. Then select "Flatten Image"
Now give yourself a working layer of this image. You will keep one behind as a backup/original and one in front that gets your level adjustments. In the layer panel, drag the background down to the new layer icon (looks like a turning page) and drop the layer on this icon to copy the layer.
Now you get to actually start looking at the imagry in a way that you can see core features. Core each block of the core, select the region inside of the pegs and do an "Auto Levels". If you leave out the pegs, this usually does a good job of giving a quick look.
Here are the results I get from the auto leveling of a plate.
You can see that this does not give the best results for the whole area. It is often useful to level just a small area by hand. Select a region on that background/backup layer with the Rectangular Marquee Tool. Copy it (Apple-C) and then paste it into a new layer (Apple-V). Drag this layer up the layer panel to the top. Then use the Move Tool to place the image directly to the left of it's position. Now select the inside of this region with the Marquee Tool and use Image->Adjustments->Levels to tweak it by hand.
You should now see the Levels pane with a histogram of the pixel values.
Grab the outer two dark sliders right below the histogram and pull them in to the main part of the histogram. Also make sure that the Preview checkbox is activated. Then try moving the gray center slider to the right to see if you can see more in the preview. Your preview should look something like this.
When you select OK, Photoshop will rerender your adjust region in full display resolution and you will see more. So try this a few times if the preview does not look so hot. The final may be much better.
The above is what I do before going through and describing the xradiogram of the core in my note file. I then greate notes something like this:
1ga-s2-069 xray ; Contact/boundary 1ga-s2-108 xray ; Contact/boundary 1ga-s2-113 xray ; Laminations from here down 1ga-s2-122 xray ; Center of a less dense zone
1gw-s2-000 photo ; Begin deformation from endcap 1gw-s2-004 photo ; End deformation from endcap 1gw-s2-014 photo ; Faint transition to a smoother surface 1gw-s2-023 photo ; Very faint contact
04.13.2005 08:05
MusicPublisher
When you want to listen to something like a lecture series once and
probably never again, you probably don't want to add it to iTunes. I
have all sorts of things like this lurking around in my iTunes library
and they make party shuffle very annoying. MusicPublisher
looks like a nice solution. It publishes a folder via the DAAP
protocol. I have not tried this, but it looks good. Plus the other
has written a number of other interesting Mac OSX apps like SSH Tunnel
manager.
Info on tweaking the Wifi list of routers... not tested! And I could not find any of my normal access points that I use.
Info on tweaking the Wifi list of routers... not tested! And I could not find any of my normal access points that I use.
If you check out com.apple.airport.plist in your user's Library/Preferences folder, you can see which AirPorts you are selected to automatically associate with, and add and remove them as necessary. ... others are stored in:Today the RIAA is supposed to sue a whole bunch of UCSD people. Anyone know who is getting nailed? I don't fileshare, but it is always scary that they might target the wrong people by accident. How do they prove that person X was really who was filesharing? What if someone was sharing through an open access point? It is not illegial to have an open access point, right?
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
They are stored in a hard-to-access serialized format, so you can use this software to open that file and modify it.
binary: http://gizmolabs.org/~andrew/WifiEraser.zip src: http://gizmolabs.org/~andrew/WifiEraser-src.zip
probably best to save a backup of that file just in case.
04.06.2005 11:09
Nomad is still going
Wow. I did not realize that the CMU Nomad is still going. I am sure
that it must be rather different than when I worked on in 1997.
Researchers Deploy Robot On Frozen Lake In Preparation For Antarctic Expedition
04.05.2005 14:25
Photoshopping a digital xray
Here are some quick notes about processing the digital xrays to bring
out the features. The auto levels and auto contrast work a bit, but
it is better to use the levels feature as you have a bit more
control. What you really want is to use
Image->Adjustments->LevelsThis will present a histogram of your 16 bit grayscale image. There are usually large dead zones on the left and right, so pull the out sliders into those edges to get a better look. Most of my xrays are two humped camels. The hump on the left is the frame background, so drag the outer sliders to just the large right hump and your xray should start showing a lot more in the way of features. Then try dragging all three around a bit to see what give you the best results.
04.03.2005 19:44
Get your flu shot
I can now give testimony to getting your flu shot. This flu sucks. I
got to spend 6 hours in the ER with this one and got my first IV. Not
much fun.
So go get your flu shot if you haven't already.
So go get your flu shot if you haven't already.
04.01.2005 09:56
BeautifulSoup
BeautifulSoup
sounds like a very handy python tool to do html screen scraping type
stuff. Too bad it is not in fink.