A few shots from the BBC walk to Crooked Pond today:
Note the closed eye:
Among other things, I took a walk around Lyons-Cutler Reservation today. Walking through the woods, I noticed an eggshell on the ground:
I started looking up and noticed a couple sticks in the tree right on the path. Looking carefully, a tail was visible:
At this point, I was fairly sure it was an owl, but not convinced. I took a few steps off the path and couldn’t find the bird. A few more steps however:
Guess that confirmed it. That’s Block Framingham 4. If the owner of the block wants more details I can try, although it was pretty much see the egg and look up.
Also had at least 4 Great Blue Herons on the nest.
A bit of a spam issue finally pushed me to switch hosts. I’ve been meaning to do this for a while for code hosting purposes (not to mention backup), so hello textdrive.
Thanks to PSF for the 3 years of hosting, recommended if you just need to dump files.
As I transition, I’ve lost the timestamps on posts, so things are out of order right now. Luckily it’s only a couple months of stuff.
I decided it’s easier to use flickr for hosting pictures with the new camera. Flickr has a requirement that all photos link back, so it would get ugly pretty quickly if I had to do the link and image tag every time (although I could just cut and paste their code).
Instead, I wrote a Blosxom plugin that takes the url to the picture itself and a description and builds the link. It was all of 20 lines, most of which was blosxom required empty methods. The actual linking consisted of one regex match, a small bit of parsing that and then a replace with the url and image link.
Unfortunately, flickr urls include underscores and the Markdown plugin tried to make those into emphasis. Instead of just renumbering/renaming, I added a Markdown fixer that does a search and replace for <em> tags in the src links and reverts them to underscores.
Finally got to take my new toy out and use it a bit. Click around and you can get closer to the original size. Already learning a bit about the advantages of RAW as the first shot was raised 2/3 of a stop in Lightroom. Not sure if I want to use Lightroom or Aperture yet, although it seems like Lightroom is easy to use with multiple disks.
Unfortunately the dove was just about finished when I got home. Every last bit of meat was plucked off. After the hawk left, we walked over and looked around and could barely find a trace other than the feathers.
Watching the hawk as it finished was quite interesting. Working on the last piece appeared to be difficult. The bird was having trouble holding it down to rip off the meat and kept pulling it up from under its other foot. Eventually, it moved to a branch where it was able to hold it down. After finishing, it spent quite a while wiping its bill on the branches, before shaking off a few times and taking off.
Stealing an idea from the Canadians, here’s a December-February list for Waltham. Dates and locations are the first sighting. Birds in bold are my first Dec-Feb sighting in Waltham.
Dec: 1: 16, 2: 33, 6:34, 8:35, 9:36, 11:37, 13:38, 15: 39, 17: 49, 20: 50, 25: 51, 28: 52
Jan: 4: 53, 20: 54, 21: 55, 31: 56
Feb: 1: 57
So final total 57, which is the same as last year. Overall total is now 74, with the additions of Brown Creeper, Eastern Bluebird, Yellow-rumped Warbler, Hermit Thrush, and Iceland Gull. From my calculations, there were at least 210 on the overall Massachusetts list this year.
In my waiting-for-people-to-leave-so-I-can-get-into-classrooms time at work I wrote a roman numeral translator in Factor. It’s a bit different from your normal implementation as Factor’s parser actually does almost all the work:
USING: strings parser kernel words sequences math ;
: NUMERAL: CREATE dup reset-generic dup t "parsing" set-word-prop parse-definition parsed add define-compound ; parsing
NUMERAL: I 1 ;
NUMERAL: IV 4 ;
NUMERAL: V 5 ;
NUMERAL: IX 9 ;
NUMERAL: X 10 ;
NUMERAL: XL 40 ;
NUMERAL: L 50 ;
NUMERAL: XC 90 ;
NUMERAL: C 100 ;
NUMERAL: CD 400 ;
NUMERAL: D 500 ;
NUMERAL: CM 900 ;
NUMERAL: M 1000 ;
: separate ( str -- str )
"" swap [ " " append ] [ add ] interleave ;
: join-special ( str str -- str )
dup >r split1 [ 1 r> remove-nth swap 3append ] [ r> drop ] if* ;
: merge-specials ( str -- str )
[ "I V" "I X" "X L" "X C" "C D" "C M" ] [ join-special ] each ;
: convert-numerals ( string -- arr )
separate merge-specials parse ;
: all-numerals? ( str -- ? )
[ "IVXLCDM" member? ] all? ;
: roman>number ( roman -- number )
>upper dup all-numerals? [ convert-numerals sum ] [ drop "Not a roman numeral" ] if ;
Instead of grabbing characters and keeping a running tally, I defined a bunch of parsing words using NUMERAL:
to hold the values. I then took the string and split it into individual characters (“XIV” becomes “X I V”). The 4’s and 9’s are then rejoined (so we get “X IV”). I then simply parse the string, which gives a list of numbers and sum that up. It’s not perfect as it allows any pattern of numerals (“IVIVIVIV” parsed to 22), but good enough.
A few pictures from the weekend:
Both at the Charles. And at Lyman Pond:
Those should be the first birds I’ll confirm for the BBA
And today I found my first Killdeer of the spring at the UMass Field Station. Too bad it’s going to be frozen to the ground tonight and the rest of the week. Things should be picking up after that.
The code for generating the checklist is written in Factor. Factor is rather outside the mainstream, but it works beautifully for my purposes.
I store the checklist data in a text file that looks like the following:
CHECKLIST:
FAMILY: Wrens
SPECIES: Carolina Wren
STATUS: Fairly common year-round. Can be found almost anywhere. There's too many around to not be breeding, but I have yet to find a nest.
PB
END
SPECIES: House Wren
STATUS: Regular in spring and summer. Possible almost anywhere. Young at Paine Estate imply breeding.
CB
END
SPECIES: Winter Wren
STATUS: Probably a rare visitor, possible at all seasons?
RECORD: M. Emmons, 5/14/1997, ? , 2
RECORD: R. Haaseth/D. Finch, 2/6/2004, near Prospect Hill, 1
RECORD: R. Haaseth/D. Finch, 10/2005, ?, 1
PERSONAL: 11/25/2006, Met State, 1
END
SPECIES: Marsh Wren
STATUS: Likely a regular migrant and possibly a breeder at Waverly Oaks Marsh.
RECORD: M. Rines, 4/20/2006, Waverly Oaks Marsh, 1
END
END
HYPOTHETICAL: White-winged Crossbill | irruptive species
HYPOTHETICAL: Hoary Redpoll | irruptive species
HISTORICAL: Black Vulture | coming soon
HISTORICAL: Boreal Chickadee | coming soon
HISTORICAL: Louisiana Waterthrush | coming soon
This is a nice clean structure that is easy to parse. In fact, the code to parse it is "USE: checklistn" swap dup file-length swap <file-reader> stream-read append parse call ;
Yep, the checklist is actually code that parses itself.
To do this, I defined a few tuples:
TUPLE: checklist confirmed hypotheticals historicals
TUPLE: family name species
TUPLE: species name status breeding records
TUPLE: record observer date place quantity
TUPLE: historical name details
TUPLE: hypothetical name reason
Each one simply contains the data and stores anything below it in a vector. I then defined a bunch of words that handle the parsing.
CHECKLIST:
creates a new checklistFAMILY:
creates a new family and gives it the name of whatever is on the lineSPECIES:
does the same for speciesSTATUS:
stores the statusPB
and CB
store the breedingRECORD:
and PERSONAL:
create and store records (PERSONAL:
creates a record with observer “me”)END
is a generic word that adds the species or family to the family or checklist respectively (I’d like to define it for the checklist as well, but the stack effects don’t match so it doesn’t work)HISTORICAL:
and HYPOTHETICAL:
do the obviousFor the most part, defining those was straightforward. The trickiest part was dealing with status, as I had to be able to call a word for the next object on the stack after reading the status in. I ended up with the ugly
: STATUS: rest-of-line swap ?push swap swap ?push set-species-status V{ } clone [ push ] keep >quotation swap ?push keep swap ?push ; parsing
mess. I’m sure there’s a better way but that took a couple days to get and I haven’t fiddled with it since.
Getting from the checklist tuple to the output was pretty easy, just doing lots of formatting with make
and working down.