- Ohlone Wilderness Trail
- Ten Lakes Basin
- Southern Yosemite Loop (from memory: Chiquito Pass, Givens Lake, Moraine Mountain, Merced Pass, Ottaway Lakes, Red Peak Pass, Post Peak Pass, that other one nearby with the Porphyry rocks pattern, Fernandez Pass, Chain Lakes)
- Some Other Year:
- Blackcap Basin
- North Lake / South Lake (e.g, Bishop Pass, Dusy Basin, M?FKR, Muir Pass, Evolution *, ... Piute Pass)
- follow "Wired" on the CDT. http://www.walkingwithwired.com/p/pct-2011.html
- I found a potato bug in the dogs' food dish;
- fed it to the chickens;
- an oak tree had fallen, mostly blocking my road, and I could barely sneak past it (I live on a cul-de-sac, so there is no alternate route);
- great clouds-in-the-trees in Boulder Creek;
- a couple dozen turkeys on highway 9 just south of Camp Campbell;
- more great clouds-in-the valley from Sempervirens Point;
- a segway commuter (in Cupertino, on Foothill/Stevens Canyon Road just south of Stevens Creek);
- an airship in Mountain View; and
- it's still technically Autumn.
http://picasaweb.google.com/dlandauer/IgLTwinLakes The actual trip report will be in another posting. [Linked here]
I had a small problem to solve once we got back: Ben had one of my cameras, and I had another. Each one can set the "creation time" in the JPEG file's metadata, but the two cameras' internal clocks were not synchronized, and I wanted to send them up to Picasa in chronological order. The rest of this weblog entry isn't really about the backpacking trip (read the pictures' captions for that, or the forthcoming trip report), but more about how I solved the time-synchronization problem.
[This turns out to be a problem others have run into, and there's a Linux program called "jhead" that can do this kind of date manipulation. But writing the small Python program was quick and somewhat entertaining...]
I did some bulk file renaming to make the filenames lowercase, remove some leading zeros, and make the camera names -- Lumix and Sony -- clearer. I run Mac OS X, which has a command called "sips" (Simple Image Processing System"?); I used it to extract the recorded times for each photo, and listed each time and its corresponding filename into a text file. After another couple of global substitutes, I had a Python array containing the filenames and their nominal times, like this:
The next question was, when and where did we take any pictures that I knew were from around the same time? What I came up with was that on our last hiking day, in Kerrick Meadow, we saw a pair of Mountain Chickadee chicks, running around on a muddy streambed, and I knew we had both taken pictures of them. So I found a couple of the corresponding photos
pix_and_times = [ [ 'lmx50553.jpg', '2009:07:10 07:06:45' ], [ 'lmx50555.jpg', '2009:07:11 12:15:30' ], ... [ 'lmx50795.jpg', '2009:07:16 16:08:07' ], [ 'lmx50796.jpg', '2009:07:16 16:50:09' ], [ 'sony6308.jpg', '2009:07:12 05:36:12' ], [ 'sony6309.jpg', '2009:07:12 05:36:22' ], ... [ 'sony6524.jpg', '2009:07:16 06:06:31' ], [ 'sony6528.jpg', '2009:07:16 06:07:48' ], [ 'sony6529.jpg', '2009:07:16 06:08:25' ] ]
|Lumix chick||Sony chick|
and figured out that they were 12 hours and 23 minutes apart.
Armed with that knowledge, I wrote 50-some lines of python that renamed the files so that their filenames, sorted alphabetically, would also be in correct chronological order. The guts of the code:
The aatrans function translates an integer between 1 and 676 into 'aa', 'ab', 'ac', ... 'zx', 'zy', 'zz'
# Make an object for each photo pixobs = map(Pixob, pix_and_times) # Parse the dates of the photos, and adjust my notion of the creation # time for only the sony ones. for ob in pixobs: ob.parse_date() ob.adjust_sony_time() # Sort by adjusted date pixobs.sort( date_cmp ) # Print out a "mv" command to rename each file with a name # that will sort the way we want. for nr, ob in enumerate(pixobs): print 'mv ' + ob.fn + ' ' + aatrans(nr) + ob.fn
Finally, I ran the shell on that output, resulting in files with names like these interleaved ones, from somewhere in the middle:
def aatrans ( nr ) : qq = nr // 26 rr = nr % 26 return atoz[qq] + atoz[rr]
(At some point, I'll figure out how to put the python source code somewhere on the web. Note that it doesn't include the bulk renames and sips data extraction.)
cvlmx50622.jpg cxsony6314.jpg cylmx50623.jpg czsony6315.jpg dalmx50624.jpg dblmx50625.jpg dcsony6316.jpg ddsony6317.jpg
My favorite part of this is how well the time-alignment was demonstrated. After aligning the photos via the chicks, I went back and looked at this sequence of photos taken as we were climbing the snow and rocks towards Burro Pass. I took a photo of Ben, way up on the rocks above us, then I zoomed way in and took another one, nine seconds later. In between those two shots, the sorting program placed the picture that Ben took, of me taking one of those pictures! Here's that sequence:
The summary: Daylight Savings Time is not symmetrical around the solar calendar — it does not "surround" the days of longest light as one might expect if one hasn't thought about it. So if you like to do outdoors stuff (e.g., hiking or mountain-bike riding) while it's light out, especially mid-week after work, the time to get started with that sort of outdoors stuff is NOW.
Some details: If we were to start DST at the spring equinox and end it at the autumn equinox, then it would be close to symmetric in the sense I'm talking about. Around the day we spring ahead into daylight savings time, sunset would change from being (say) 6:10 to being 7:10; and the day we fall back to winter time, it would go from 7:10 back to 6:10.
But we don't do the DST changes symmetrically around the equinoxes: we spring ahead in early March, roughly one or two weeks before the after the spring equinox, and we fall back in early November, around six or seven wo weeks after the fall equinox. This means that it's lighter later into each day at the start of DST than it is at the end. In fact, a little bit of trigonometry (or some actual observation) will tell you that the equinoxes are the times of the fastest change in the days' lengths, so it's lighter a lot later at the start of DST than at the end.
Around here (San Francisco Bay Area), the springtime change this year (2009) made our notion of sunset change from 6:10pm to 7:10pm. So it's already worth getting out for a short (60- to 90-minute) hike or ride after work even if you have to work until 6:00pm.
By contrast, the autumn change around here, this year, makes our label for "sunset-time" change from 6:10pm to 5:10pm. So that's a full hour's difference, compared to the springtime change. It generally means that despite the usually dry autumn weather we get, those of us who have to work until 6:00pm or later have few choices by October — learn to like riding with lights (and to find places where it's legal), or stick to riding or hiking only on weekends, "hookey" weekdays, or long "lunch"es.
Bottom line: For those of us for whom snow is not an issue, the dry parts of March or April are the time to start those after work hikes or rides.
So after years of writing the occasional exhortation/warning about this, I finally wrote an app engine app to display the sunrise and sunset data graphically, so you could more easily eyeball and internalize the asymmetry. Here's the link: DST Asymmetry. It's somewhat fragile at the moment, and still has a couple of extraneous debugging links and a css that, um, could be nicer.
With line at 5:30pm:
With line at 6pm:
zsh: missing end of nameThe command line was something like this:
echo J Random Guru (firstname.lastname@example.org) is an email address.A brief web search led to this old zsh source file, which helped to explain things a tiny bit. Based on it, I tried a slight modification:
echo J Random Guru (email@example.com@) is an email address.and got a much more satisfying error message:
zsh: unknown groupIt turns out that zsh's parenthesis-based file filtering (called "Glob Qualifiers" in the man page) has some features I never new about. 99% of the time that I use it, it's for a command line something this:
ls -ld *(/)which does a long ls of all of the directories (and not their contents) in $PWD. Next most common are *(^/) which is all non-directories, and *(*) (executable plain files), which I confuse with *(x) (owner-executable files). The reason that this is relevant to the puzzling error message is that two of the possibilities inside the parentheses are "u" for userid and "g" for group id. These take a numeric user or group id, or a matchable delimiter! So a slight modification of my pattern (*(firstname.lastname@example.org@)) should match any files that are owner-readable (the "r"), and have group-ids matching the group named "example.com". Of which there are none. For reference:
$ echo $ZSH_VERSION 4.2.5 $
Reminded me somehow of my wife's favorite Latin faux-blessing. Imagine having a nice satin robe and miter, so you look like a pope, and saying "Dasypus novemcinctus". Sounds plausibly like some kind of blessing, but ... well, you can look it up.
LA turns 226 on Sunday ... but can still pass for 115 thanks to all the work it's had done(from fark.com).
This is a test of dashboard posting to my blogger weblog, using one of the new Mac OS X Dashboard widgets.
It looks pretty cool, but only for very small weblog postings.
Extra tidbits to note: - lucane.org free "groupware" - that logger "anti-framework" - neward's predictions for 2k5, except that his site is currently down. Note that Bruce Eckel has a new weblog for shorter thoughts.
http://j2medeveloper.com/weblog/page/eortiz/20041228#about_predictions_the_cross_of C. Enrique Ortiz' (J2ME guy) self-prediction review http://www.weiqigao.com/blog/2004/12/24/1103918583000.html Weiqi -- Blogging Year In Review: 2004. http://jroller.com/page/Trainer/20041223#struts_javaserver_faces_and_java Andrew -- Struts, JavaServer Faces, and Java Studio Creator: The Evolution of Web Application Frameworks. http://today.java.net/pub/a/today/2004/12/23/books.html Ten for the Holidays. Greg Wilson reviews books for programmers and selects ten (or more) for your holiday reading. http://today.java.net/pub/a/today/2004/12/23/patterns.html Holiday Party Guide to Patterns. A survey of some of the Gang of Four design patterns: Composite, Singleton, Factory, Adapter, Decorator, Facade, and MVC. http://www.blueskyonmars.com/archives/2004/12/23/index.html Kevin ... Where to put files on the Mac
http://www.jazillian.com/reasons.html Joe -- Why Java is better than C http://www.clientjava.com/blog/2004/12/22/1103726737000.html Scott ...Scott -- Java Graphing, JGoodies, Screenshots with Java. http://www.onjava.com/pub/a/onjava/2004/12/22/jakarta-gems-1.html The Hidden Gems of Jakarta Commons, Part 1. The Jakarta Commons has a wide-ranging collection of handy classes that can save you the trouble of reinventing the wheel yet again. http://www.onjava.com/pub/a/onjava/2004/12/22/2004-yearender-1.html ONJava 2004 in Review: Popular Articles. Editor Chris Adamson takes a look back at some of the most popular articles published on ONJava during the last year.