Skip to content

Archive

Tag: Genealogy

I just upgraded my installation of Gramps, my favourite genealogical application, to the latest version (3.3.1).

One of the nice things is that, compared to my previous version (2.6 I think it was) I had installed, the install file for Windows is self-contained, making it easy to install. Previously, I had to install Python separately, which can be a pain, but now one setup file installs everything you need.

However, there is one issue that still bugs me – there is no way to easily set the application language without a technical solution.

Gramps relies on the computer’s locale settings to determine the language, which is not always so great. For me, for example, my locale is set to the Netherlands, setting the language to Dutch, but I want to work in the app in English.

There is an easy solution though. It is fixable by creating a batch file setting the desired local before starting the app, and the language you want will be selected.

SET LANG=en_US.UTF-8
SET LANGUAGE=en_US.UTF-8
"C:\Program Files (x86)\GrampsAIO\bin\pythonw.exe" -EO ..\share\gramps\gramps.py

Now, running this batch file, I can enjoy Gramps the way I want it.

Share

AncestrySync for Geni is new genealogy product is currently in Beta, and it looks and feels very slick.

This program makes it very easy to download and synchronise your family tree off Geni, providing a number of options as to how to export your tree, such as how many generations forwards or backwards, and what tye of relation.

AncestrySync

It also enables you to save the data in most of the currently popular formats, such as Gedcom, PAF, Lecacy, and RootsMagic. The only one missing there that I would love is Gramps, which is the main application I currently use, but no doubt that is something that will be in the application soon, as it is still only in Beta.

The application also allows you to synchronise your data manually or automatically, and gives you an option to share your tree with your friends.

All in all, I really like this application, and would heartily recommend it to any Geni user.

Share

For over three years now, I have been trying to link up the ancestry of Jacques de Savoye, one of my ancestors who settled in the Western Cape with the French Huegenots, to the noble de Savoye family. In this old post, I mentioned that I had a very strong suspicion that my ancestral de Savoye line was a descendant line of the noble family, but could not find the links I needed.

For one thing, my descendants came from the Hainault region, whereas the noble line was centered around the Savoy region. The second problem was that my progenitors were Protestant, while the nobles were Catholic.

So the question is, when did my ancestors move across a country, while changing religious beliefs?

Well, I have now managed to make a small bit of progress in sorting out this puzzle. I have found a source pushing back the ancestry of Jacques de Savoye several more generations than I previously had known.

The furthest back I am able to go now, is to a Pierre de Savoye, born in around 1430, in the same region as the noble de Savoye family, thus solving the riddle of how they ended up so far away.

Now this does pose a new riddle to solve. How does Pierre de Savoye link to the noble branch?

The frustrating thing now is that I suspect that Pierre is probably no more than one or two generations removed from the noble family, yet I am unable to find any records linking him to them. It may be possible that he is the son of an illegitimate child from one of the nobles, or else the historical record might just be incomplete. I have gotten so close to proving a link, but still lacking just that little bit.

However, at least this gem of genealogical data I found adds further weight to my reasoning that Jacques de Savoye was indeed of noble stock.

Share

For quite a while, I have been using Family Tree Legends 5 as my main genealogy application to keep track of my family tree, but hit upon a bit a snag recently.

FTL just ceased to stop working, and doing a bit of web searching, discovered that this app does not like running on Windows XP and Vista. I suspect that some Windows update that ran installed something incompatible with FTL.

Well, that prompted me to look to find a new application to use, and after much searching, I settled on GRAMPS, which is a open source solution.

GRAMPS is built using Python, predominantly for Linux, but it also runs in Windows.

Some of the best features of GRAMPS is that it it supports plugins, so if it does not have a feature that you want in it, you can find a plugin for it, or if you are so inclined, you can write one yourself.

To be honest, capturing data is a bit slower than what I was used to in Family Tree Legends, but the other features in the application, such as the tree views more than make up for this.

Installing it in Windows was a bit of a hit and miss affair for me. It requires Python, and a few other dependencies to be installed before it will work. Despite what the GRAMPS 3.2.5 installer claims, I found that it needed specific versions of these dependencies to work.

These are:

I am sure it is possible to get other combinations of these libraries to work, but that would amount to much trial and error.

Once I got it up an running, it has worked like a charm, and I am pretty certain I will be sticking with GRAMPS for quite a while.

Share

After getting the dust to settle after moving my blog to its new home, I did a Google search on “smokycogs” to see if there are any remaining references to my domain that I need to update, and came across something very interesting.

It appears that my blog has won the Best Open Source Blog award in the GeneaBlog Awards 2010.

While my site is aimed primarily at programming, they felt that I had enough genealogy content, with my posts on Family Traces and how to build a genealogy app, that my site deserved the award.

While I do not know how esteemed this award is, I am at least glad that this award is a sign that the information on my site is at least of some use to people.

Share

Now that we know how gedcom files work (covered in part 1), we need to actually parse the file.

The way in which the gedcom is structured is that each new record entry starts on a line with a 0. All lines with a 1 under that belong to that record. Similarly, lines with a 2 prefix, belond to the the entry prefixed by a 1 directly above it.

This makes processing rather straightforward. All we need to do, is read the file line by line, then split up the line into its components, and process accordingly.

All lines have a number (0, 1 or 2) as the first field in the line, and each field is seperated by a space, for example 1 SOUR FamilyTraces

The second field in the line is usually the keyword which tells us what the data represents. Some keywords will not need an extra data field in the third field, but usually, these types of lines which are grouped together with that line.
As an example, the VERS and FORM lines are linked to the GEDC keyword as the 2 in the first field shows they belong to the preceding line.

1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED

There is an exception to the second field being the keyword, and that is in the individual, family and note record entry fields which take the format 0 @Ixxx@ INDI for an individual record for example.

Based on all of that, all we need to do, is split up the line into the three fields, and then process each keyword independantly from each other, while keeping track of which type of record we are currently in, so that we can assign the data to the correct structure.

Here is the full code for the parser, that works pretty much exactly as described above. I have not implemented the full spec of the gedcom file format, but only enough as I need for the application. It is easily modified, however, to add the rest of the spec in if needed.

Usually, now would be the time where I list the source code for the code I have talked about in this blog post, but due to some bug with WordPress and the plug-in I am using to render my code samples nicely, the code for this section is crashing Firefox, so I have included the code for the GedcomParser class as a link to a text file containing the code.

Share

In my previous post in this series, I introduced the Family Traces family tree application. Now, I am going to go through the importing of a gedcom file.

Firstly, what is a gedcom file?

The gedcom file format is a text file format for the transmission and storage of genealogical data, created by the Church of the Latter Day Saints for their genealogical projects.

A standard gedcom file has a header section, individual records, family records and notes. The various records are linked to each other by ids, in the format of @I1@ for an individual record for example. For a full spec of the gedcom format, have a look here.

Here is a sample gedcom file

0 HEAD
1 SOUR FamilyTraces
2 NAME Family Traces
2 CORP Serge Meunier
1 DEST Standard GEDCOM
1 DATE 2010/02/16
1 CHAR ANSEL
1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED
0 @I1@ INDI
1 John/Smith/
2 GIVN John
2 SURN Smith
1 SEX M
1 BIRT
2 DATE 15 dec 1950
2 PLAC
1 FAMC @F2@
1 FAMS @F1@
0 @I2@ INDI
1 Jane/Doe/
2 GIVN Jane
2 SURN Doe
1 SEX F
1 FAMC @F-1@
0 @F1@ FAM
1 HUSB @I1@
1 WIFE @I2@
1 CHIL @F3@
0 TRLR

Before we start processing the file, we need to have some data structures to hold the data from the file.

    public struct GedcomHeader
    {
        public string Source;
        public string SourceVersion;
        public string SourceName;
        public string SourceCorporation;
        public string Destination;
        public string Date;
        public string File;
        public string CharacterEncoding;
        public string GedcomVersion;
        public string GedcomForm;
    }

    public struct GedcomIndividual
    {
        public string Id;
        public string GivenName;
        public string Surname;
        public string Suffix;
        public string Sex;
        public string BirthDate;
        public string BirthPlace;
        public string Occupation;
        public string Description;
        public string Nationality;
        public string DiedDate;
        public string DiedPlace;
        public string DiedCause;
        public string ParentFamilyId;
        public string SpouseFamilyId;
        public ArrayList Notes;

        public GedcomIndividual(string id)
        {
            Id = id;
            GivenName = "";
            Surname = "";
            Suffix = "";
            Sex = "";
            BirthDate = "";
            BirthPlace = "";
            Occupation = "";
            Description = "";
            Nationality = "";
            DiedDate = "";
            DiedPlace = "";
            DiedCause = "";
            ParentFamilyId = "";
            SpouseFamilyId = "";
            Notes = new ArrayList();
        }
    }

    public struct GedcomFamily
    {
        public string Id;
        public string HusbandId;
        public string WifeId;
        public string MarriageDate;
        public string MarriagePlace;
        public ArrayList Children;
        public ArrayList Notes;

        public GedcomFamily(string id)
        {
            Id = id;
            HusbandId = "";
            WifeId = "";
            MarriageDate = "";
            MarriagePlace = "";
            Children = new ArrayList();
            Notes = new ArrayList();
        }
    }

    public struct GedcomNote
    {
        public string Id;
        public string Text;

        public GedcomNote(string id)
        {
            Id = id;
            Text = "";
        }
    }

We also need a set of enumerations we will use to keep track of where we are in the file. This is important because the meaning of a field in the file is dependant on the place in the file it occurs, so we need to be aware of what we need to do at all times, but more on that later.

    public enum GedcomRecordEnum
    {
        None,
        Header,
        Individual,
        Family,
        Note
    }

    public enum GedcomSubRecordEnum
    {
        None,
        HeaderSource,
        HeaderGedcom,
        IndividualName,
        IndividualBirth,
        IndividualDeath,
        FamilyChildren,
        FamilyMarriage
    }

The full source is available Here.
Now we need to get to parsing the file, which is covered in Importing a Gedcom file – Part 2

Share