Monday, March 29, 2010

Washing Bottles at DeadEnds Software

This blog is for discussion of the DeadEnds genealogy software programs I am writing. As a software geek and practicing genealogist the posts will range from technical topics about implementing the software to thoughts on how genealogical research should be supported by software. I am writing DeadEnds for Apple's Mac OS X using Objective-C, the Cocoa frameworks and the Xcode development environment.

DeadEnds is a follow-on to the LifeLines program I wrote in the late 1980's early 1990's, now an open source project at Source Forge. LifeLines uses a Btree database to store genealogical and indexing records. The genealogical records are in a Gedcom format that is compatible with Gedcom standards. LifeLines is Unix-based and uses the curses/ncurses libraries to provide a primitive windows-based user interface. DeadEnds uses a more generic format for its genealogical records, one that generalizes both Gedcom and XML, so that data can be imported and exported in Gedcom, XML, or other similarly structured formats for holding hierarchical information. DeadEnds also provides more record types in order to support more of the genealogical research process.

A Note on Record Types
The Gedcom standard, such as it is, defines a number of record types, but only two, the INDI (individual or person) and FAM (family) records, hold genealogical data. These two types are suitable for representing the conclusions of genealogical projects, but are not adequate for representing the research data that are collected and that conclusions are based upon.

DeadEnds supports a larger set of genealogical records. A list of records supported by DeadEnds includes
  • Source - record describing the source of some genealogical evidence.
  • Evidence - record describing an item of information used to infer genealogical data.
  • Event - an event found in evidence, including the type, date and place of the event, and references to the person records of the role players from the event.
  • Person - the record of a single role player in a single event, including the person's name and any other information available (e.g., age, relationships to other persons).
  • PersonGroup - a record that groups together a tree of Person records inferred to refer to the same real person. DeadEnds software supports the building of PersonGroup records from Person records and other PersonGroup records in three ways: Manually; by algorithms built into the DeadEnds software; and by algorithms written in the DeadEnds programming language.
  • EventGroup - a record that groups together a tree of Event records...
  • Family - a conclusion record that brings together PersonGroup and EventGroup records.
  • Others


  1. This is IMHO extremely interesting! For years, I've been wanting something like this; the computer should store the evidence and the conclusions/inferences you make, and assist you in detecting your inference errors and recovering from them.

    I've toyed around with data structures for this (mostly stored in relational databases, because that is what I know :), but have never had time enough to create a proper implementation.

    And now I see that you are implementing a program along the very same ideas, and using almost exactly the same type of records - even down to the tree-based PersonGroup.

    I've used LL for some years, and like it - especially the ability to navigate with the keyboard, shell out to my favourite editor (emacs), and of course the availability of a custom made scripting language.

    I'd be very interested in looking at your new program. Do you think it will be very tightly tied to OS X, or would it be possible to port to Linux?

    Bjørn-Helge Mevik

  2. Bjørn-Helge,
    Thanks for the comments and I'm glad you have success with LifeLines. I've been worrying about the research vs conclusion issues in genealogical software for years, as I see you have too. I am implementing the programs using Apple's Cocoa frameworks (Foundation and AppKit). They have open source equivalents on other environments (Linux, Windows), though I have no experience with those environments so can't say how difficult porting to them might be.

  3. I did a little searching, and on the face of it, it doesn't look too bad, actually. The GNU compiler (gcc) natively supports Objective C, and the GNUstep package is an open source version of the Cocoa/OpenStep API, implementing "the AppKit and Foundation libraries as well as the development tools available on Cocoa/OpenStep, including Gorm (the InterfaceBuilder) and ProjectCenter (ProjectBuilder/Xcode)" (
    But the proof of the pudding is in the eating, as they say. :-)


  4. Hi Tom,

    I stumbled across your blog after researching "genealogy database schemas" and finding a reference in BetterGedcom. Is DeadEnds still being actively developed? Is there a Windows version available? I've been debating about writing my own application after years of having dealt with RootMagic and PAF (from FamilySearch). I saw an interesting slideshow about using MongoDB for a genealogy project, and it probably would be appropriate for someone, like FamilySearch or Ancestry, who is interested in millions or billions of data points, but I'm still leaning toward a good old-fashioned relational database because genealogy is ALL ABOUT the relationships! :-)

  5. It's been more than 3 years since my previous inquiry and there has been no response. I will conclude, based on limited results on Google and the lack of activity on this very blog, that DeadEnds is just that.