Archive for October 2008

Sandhill Cranes

A couple weeks ago, I was in my garage and heard a group of birds that sounded completely foreign to me. I eventually located the source: it was what appeared to be several dozen migrating geese. I thought they were geese because they were in the usual ‘V’ formation (three or four ‘V’s, in fact). At the time, I had no idea what species they were, but because of their call, I knew they were not Canada Geese, which is pretty much all I see around here.

I intended to figure this out by listening to goose audio clips, but luckily, I never did. I say luckily because that would have been a fruitless effort — they were not geese at all. I saw a short clip on the news yesterday about Sandhill Cranes and immediately recognized the sound.

The groups I had seen were far too high up for me to recognize they were not geese (if nothing else, the legs would have given it away). I had never seen in person or heard Sandhill Cranes before, but I doubt I will have any difficulty identifying their call in the future.

An audio clip of Sandhill Cranes in flight (plus a crow) is available here.

You can find plenty of pictures on the internet. A few short, interesting videos are available here and here.

Shattered Elbow II

Here is a clearer view of the contraption introduced in Shattered Elbow.

Ice Memory

I recently read an interested article titled “Ice Memory” in The New Yorker by Elizabeth Kolbert. The article was published in early 2002 and is set in North-central Greenland where, in the summers of 1996 through 2003, scientists drilled an ice core from the top of a glacier down to bedrock at 3085 meters. The ice core encases a climate record back to around 123000 years before present.

The project was called the North Greenland Ice Core Project (NGRIP) and was created to produce an ice core to reproduce (or possibly not) the results obtained from cores extracted by earlier projects, particularly the core produced by the Greenland Ice Core Project (GRIP).

The article covers many topics including recent shifts in the understanding of the climate, a history of Greenland — specifically the first known European settlement of Greenland by the Norse, the objectives of NGRIP, daily life on the ice, and what the ice can tell us.

Central to the article are the startling observations (resulting from the study of earlier ice cores) of extremely abrupt changes in average temperature several times over the last 100000 years. Kolbert writes:

Around fifteen thousand years ago, Greenland abruptly warmed by sixteen degrees in fifty years or less. In one particularly traumatic episode some twelve thousand years ago, the mean temperature in Greenland shot up by fifteen degrees in a single decade.

The story ends considering the relationship between the rise of human civilization and the information extracted from Greenland ice cores.

I have not read enough to know how much agreement there is on the results from Greenland ice cores or what the sticking points are, but in spite of that, the story is quite interesting. More context would, however, be nice.

Since I read this piece more than six years after publication, I wondered what results had come out of the effort, specifically with regards to “Eemian Ice Age Event One”. A paper, “High-resolution record of Northern Hemisphere climate extending into the last interglacial period“, authored by the NGRIP members and published in Nature in 2004, reports that the GRIP ice core that led to the observation of Event One was contaminated by “ice folding”.

Geneagrapher 0.2-r1 Released

Python 2.6 was released less than a week ago. This Geneagrapher release slightly changes an installation-related file to enable installation on machines running Python 2.6 that have not yet installed Python setuptools.

The Geneagrapher features in this release are identical to those in version 0.2, so interested parties are recommended to read the Geneagrapher 0.2 release announcement for more information on the package.

If you have successfully installed Geneagrapher 0.2, there is no need to install version 0.2-r1.

Geneagrapher 0.2 Usage Guide

The purpose of this post is to explain how to use version 0.2 of the Mathematics Genealogy Grapher (Geneagrapher). For more information about the release of version 0.2 see the release announcement. For more information about the Geneagrapher in general, see the Mathematics Genealogy Grapher Page.

Basic Concepts

The input to the Geneagrapher is a set of starting nodes. If you want to build the ancestor graph of C. Felix Klein, then C. Felix Klein is the starting node for that graph. Multiple starting nodes may be provided (to produce the combined ancestor graph for an academic department, for instance).

Each individual stored in the Mathematics Genealogy Project’s website has a unique integer as an identifier, and this identifier is what is passed to the Geneagrapher for starting nodes. The identifier is embedded in the URL for records in the Mathematics Genealogy Project website. For example, Carl Gauß has the ID 18231 ( and Leonhard Euler has the ID 38586 (

Before running the Geneagrapher, go to the Mathematics Genealogy Project and gather the identifiers of the starting nodes for the graph you have in mind.

Geneagrapher Usage

After installing the Geneagrapher, running

ggrapher --help

should produce

Usage: ggrapher [options] ID ...

Create a Graphviz "dot" file for a mathematics genealogy, where ID is a record
identifier from the Mathematics Genealogy Project. Multiple IDs may be passed.

  -h, --help            show this help message and exit
  -f FILE, --file=FILE  write output to FILE [default: stdout]
  -a, --with-ancestors  retrieve ancestors of IDs and include in graph
  -d, --with-descendants
                        retrieve descendants of IDs and include in graph
  -v, --verbose         list nodes being retrieved
  -V, --version         print version and exit

Explanations of some of the options are given below, followed by examples.

-f FILE, –file=FILE

By default, the Geneagrapher writes the data it generates to standard output. If you want the data written to file, you need to redirect the output or use the -f or –file switch. When one of these switches is used, the data is saved in the file name provided.

-a, –with-ancestors

When one of these switches is provided to the Geneagrapher, an ancestor graph is generated. An ancestor graph starts with the starting nodes and the works up to their advisors, their advisors’ advisors, and so on.

-d, –with-descendants

These switches instruct the Geneagrapher to extract information about the descendants of the starting nodes (i.e., their advisees, their advisees’ advisees, and so on).

Processing the Dot File

To process the generated dot file, Graphviz is needed. Graphviz installs several programs for processing dot files. For the Geneagrapher, I use the dot program. Let’s look at an example.

If the Geneagrapher has generated a file named ‘’, we can do

dot -Tpng > graph.png

This command produces a PNG file containing the graph. That’s really all there is to it. Almost.

A slightly more complicated process

I find that nicer looking final images are produced by following a more circuitous route. In the example above, I would run

dot -Tsvg > graph.svg

This produces an SVG file. At this point, I use Inkscape to open the file and export a PNG file.

A number of other ways to do this are available.


Update: the Mathematics Genealogy Project has added new data since the examples below were constructed, so if re-run, the results will look different. The commands, however, all remain correct.

Single Node Ancestry: Carl Gauß

To produce the ancestry dot file for Carl Gauß ( and save it in the file ‘’, run the command

ggrapher -f -a 18231

Multiple Node Ancestry: Friedrich Bessel and Christian Gerling

To produce the combined ancestry dot file for Friedrich Bessel ( and Christian Gerling ( and save it in the file ‘’, run the command

ggrapher -f -a 18603 29642

Single Node Descendant Graph: Haskell Curry

To produce the descendant dot file for Haskell Curry ( and save it in the file ‘’, run the command

ggrapher -f -d 7398

Note that descendant graphs often have a lot of “fan out”.

Geneagrapher 0.2 Released

I am pleased to announce the first release of the Mathematics Genealogy Grapher (Geneagrapher) package. The Geneagrapher has been around for a couple years, but it was previously only a web-based tool. At this time the original version is still available on my old site. This package is written in Python, so users will need to have Python installed (get it here).

Here are the most significant changes, from the perspective of the user:

  • Descendant trees. Now trees can be built placing a starting node at the top and graphing all of its descendants. A couple points on this:
    • These sorts of graphs tend to have a lot of “fan out” because some people have a lot of students.
    • Be careful. Do not inadvertently (or intentionally!) run a job that requests the data for thousands of nodes.
  • Better character handling. I believe all characters are now displayed correctly, as long as the generated dot file is processed by Graphviz a certain way (see the Geneagrapher 0.2 Usage Guide).
  • No limit on the number of starting nodes.
  • This is a client application, meaning the user installs it somewhere and runs it there. Furthermore, this package only generates the input file to Graphviz, so that also needs to be installed. This is probably more of a hassle than most Geneagrapher users want to go through (not all, though), but this is just the first step.

Additionally, behind-the-scenes changes happened:

  • Large portions of the code were rewritten.
  • Added a test suite to make it more maintainable. In particular, this should allow quicker diagnosis and modifications when the Mathematics Genealogy Project pages have changed.

Getting the Package

For downloading and installation information, see the Geneagrapher Page.


Usage examples are in the Geneagrapher 0.2 Usage Guide.