Tinderbox for Genealogy?


(Desalegn) #1

There are many dedicated genealogy software out there. I have tried more than 15 of them. Unfortunately, none of them work for my purpose as they always assume Western naming convention.

In the two areas I am interested in, Scandinavia (Iceland, old Norway) and East Africa (Ethiopia), sure-names are not used.

In Norway, names go like this:
Given name, Father’s name, the name of the land (farm)

In Ethiopia, names go like this:
Given name, Father’s name, Grand father’s name.

After many attempts with a lot of great and interesting genealogy software with no success, I am now thinking to use Tinderbox for this purpose.

I was thinking if anyone has an experience of this kind of practice.


(James Fallows) #2

I don’t have any genealogy-specific experience, but I think this example nicely demonstrates the ways in which the program is flexible, in contrast to a lot of others.

You could easily set up:

  • The relevant attributes, only some of which would apply to people from each country. Eg: $GivenName, $FathersName, $GrandFathersName, $LandName, $SomethingElse, etc.

  • Different prototypes, for people from each country. Eg, *EthiopianPerson, *NorwegianPerson, *SomeOtherPerson. (My own convention is to start prototypes with an asterisk for convenience.)

  • Then for each prototype, you can assign as KeyAttributes those that are specifically relevant for that nationality – and also you can set up $DisplayExpression or $DisplayName (or some other attribute) differentially, for each prototype, so it shows the info in the right order. Eg for entries with the *NorwegianPerson prototype you could have, $DisplayName = $GivenName + " " + $FathersName + " " + $LandName (or anything to similar effect).

The main point is the program allows you to have consistency in the areas that are consistent, but then easy adaptability where appropriate.


(Desalegn) #3

Thank you for your replay @JFallows.

Like you said, I was able design prototypes for names and country; and attributes for all the relevant characters like age, profession…

the actions (display expressions) ) are also great for passing names systematically from grandfather to father to child.

But, I am having challenge from the maps. It is very difficult to draw diagrams showing relationships of marriage and birth category:

Here is a simple map from MacFamilyTree:

The map clearly represents that Smith and Elsa are married–>begot Mary and John. The maps in TB cannot show that middle link.

I am having trouble to emulate these maps with the links in TB. The links in TB cannot anchor in between the notes (unless I insert some dummy invisible notes in between—i am not sure if that even possible).

Furthermore, while the data could systematically be copied using prototypes, the map (link) should be manually drawn for every individual.
Could the links be programmed?


(Paul Walters) #4

Tinderbox maps are not designed for diagramming. They are designed for displaying relationships between notes and showing attributes of notes. So, yes, you can spoof the map by adding invisible notes – but that’s just spoofing.


(Desalegn) #5

That is right.
I was also considering to rely on the outline embedding as a representation for child-father relationship. Again, the marital relations are harder to model with the outline embedding.

Embedding Mary under Smith could show that she is his daughter. This exact embedding need to be repeated fro Elsa as she is also Mary’s parent. I can replicate Mary under both Smith and Elisa containers. The problem is, I have no means of showing that Smith and Elisa are actually married in the outline embedding.

So, it seems like doing a genealogy with TB might harder.
The fact that data is stored in XML format was one of the main reasons why I was more attracted to use TB for the project–, a relatively “future-proof” data storage for keeping family history (with the genealogy).


(Paul Walters) #6

A composite might be an appropriate metaphor.


(Desalegn) #7

That is good suggestion.

If a common link could be assigned to the whole composite, that could have serve as nice metaphor to mean “have child” together.


(Paul Walters) #8

One is a “child of” each parent as well as a “child of” the union of both. So there are other options for link relationships with no loss of meaning.


(Desalegn) #9

hmm…this is getting interesting. thanks.

One question:
I want Mary to be called “Mary Smith” because she inherits her second name from her father in patronymic naming convention.

I want to put a rule to copy the $name (of the father) from the “source of the link” to the display expression of the destination (child) note.

Do the rules have a concept of “source of link”, and “destination of link”?


(Paul Walters) #10

You could work with something like

$Name + " " + links.outbound."ChildOf".$Name(destination)

in your $displayExpression for the Mary note, etc.

Edit: revised the suggestion


(Arto Astala) #11

If you look closer into your genealogy programs you’ll notice that they have a distinct entity/record type of family or family group just for this purpose.

Also the recommended practice for keeping research logs is by family group. You may also consider keeping logs of Scandinavian research by land. Finnish term is (maa)talo - (land)hus. Doing both is easy, as you can have links to both in any log entry.

Research Logs


(Galen Menzel) #12

I know this is an old thread, but I’m wondering how this project is going.

Did you ever consider representing each union as a note? This would allow you to represent naming conventions by encoding them in the union prototypes. I.e., a Norwegian marriage might have one type of naming convention, represented by rules or edicts over the people with incoming and outgoing links (i.e., parents and children), and an Ethiopian marriage could have different rules. Attributes related to the specific pairing (such as farm name) could be stored in the union note. It could end up looking something like this:

And the marriage itself could have edicts like

var father = links.inbound.father.FirstName.at(0);
links.outbound.daughter.Path.each(x) { $LastName(x) = father + "dotter" };
links.outbound.son.Path.each(x) { $LastName(x) = father + "sen" };

(Please forgive my almost total ignorance of Norse naming conventions.)

You could thus specify how the names propagate through the genealogical network by assigning the proper prototype to each union, each of which determines how the next generation is named.