Showing posts with label everything else. Show all posts
Showing posts with label everything else. Show all posts

Thursday, September 21, 2006

Automated Merger of GEDCOM Files

Have you ever had the misfortune of having to merge two GEDCOM files while doing family history research? I hope not. It’s dehumanizing. Dehumanizing? Yes, because doing a job that should be done 99% by a machine is most definitely de-human-izing.

Here’s a typical example:
Billy Bob Jones and Suzy Lee Jones are a brother and sister team working together on their family’s genealogy. The two of them live two or three time zones away from each other, and so they each maintain their own files and coordinate their research by email.

One day, Billy makes an amazing discovery: he finds the birth date of their great-great-great-great-great grandfather Olaf. What’s more, he discovers that Olaf’s death date was off by 5 years, so he updates that. Billy emails Suzy to tell her the exciting news, and Suzy requests that he send an updated version of the GEDCOM file so she can benefit from his new research. So Billy sends the requested file.

Suzy imports the file, which only contains Olaf and his ancestors, a total of 200 people (impressive, it’s true). Then she begins to merge all of the now-duplicate individuals, sources, events, …. Five hours later, she finishes, and now wonders if the five hours of tedious merging operations was a fair price to pay for the updated information.

Here’s what should happen:
Upon receiving the GEDCOM file from Billy, Suzy imports it into her family history software, which informs her that one individual has been updated, one fact being modified, another added. She tells the program that this is A-OK and she procedes to make further Amazing Discoveries.

Here’s what should __really__ happen:
Upon updating the Olaf information, Billy tells his genealogy program to notify Suzy of all updates made since they last synchronized their records. The next time Suzy opens her genealogy program, it notifies her of the new information provided by Billy, and she approves the merger.



People have been thinking about this problem for years. The sad reality, however, is that such an advanced merge capability does not seem to be available in any current consumer software (as far as I can tell). Well, why not? Part of the reason is surely that reliably determining the differences between family trees is a complex problem. But what if both versions of the tree are guaranteed to have a common individual? In other words, what if we know that Billy and Suzy’s parents are going to exist in both of their files. What if, in fact, they exist in both files with the same record ID’s? What if the family history software allows the two to synchronize their data by specifying the ID of a common root individual?

If we can depend on constant record ID’s, our job is much simpler. So what if Billy imports his current data into a new system, after which Suzy synchronizes with his system, essentially copying over all of his data, with matching record ID’s and a set common individual. Then, when one of the two makes a change, resynchronizing involves no more than comparing the corresponding ancestors of the common individual, notifying the user of any differences.

That’s where my project comes in. ‘geddiff’ is designed to be the program that does that comparison. It’s straightforward (is it not?) It limits its scope so the algorithm stays relatively simple. It will easily integrate with revision control systems such as Subversion. It will be licensed under the LGPL license, allowing anybody to link to it or call it externally, while ensuring that the source code itself remains open. It will be based on libgedcom, avoiding unnecessary duplication of effort.

Is this relevant? Is it doable? Does anybody want to help? Let me know!

References:
Geddiff project at Google Code: http://code.google.com/p/geddiff/
Beyond Project, discussing many of the same ideas: http://www.beyondproject.org/
BeyondGen, related discussion group: http://groups.google.com/group/beyondgen?lnk=li

Friday, July 28, 2006

Learning C++

I’m taking (actually, retaking) Computer Science 240 right now. So I’m learning C++. This is someting I’ve always wanted to do. I was maybe 10 years old when we got Turbo C++. My dad was the only one who knew how to use it, but still, I had fun playing with the “Heap Walker” program. I wasn’t able to learn simply by experimentation, like I did with QBASIC. Now, having paid some of my dues with tuition and time, I feel like I’m learning the language. The project we’re working on right now in class is an implementation of make. I’ve been hacking away, learning how to deal with circular #include’s, finding memory leaks and fixing segmentation faults. Maybe sometime soon I’ll be able to start contributing to some Open Source projects - another long-time goal of mine.

Here’s something I would like to code into KDevelop: a plugin that allows the file list sidebar to be sorted to have the most recently used files on top. Somehow there has to be a more optimal way to switch between source files than pushing Ctrl+/ and typing the name of the file, or moving the mouse cursor over to click on the ‘File List’ sidebar button, then back over to the file that you want to open. How about a key combination that cycles through the last five most recently used files? There must be some better way.

I Cast Mine Pod at Thee!

Lately I’ve been listening to the UbuntuOS podcast about the Ubuntu Linux distro. It’s a good show, for sure, though there’s a bit too much down time where the guys are just sitting there saying, “Yeah….uh…. so linux is pretty cool, yeah…” It really does remind me of my conversations with my brother, but with some more varietous viewpoints.

The people on the ‘cast are constantly citing website addresses or terminal commands. It would be useful to develop a technology that would allow the people speaking on the podcast to send text directly to the listeners. Imagine the show mentions a website, and up pops in the corner of your screen or your media player a notification window. Why not use libnotify/notification-daemon? Actually, such a technology already exists in the form of Vorbis metadata. At least one program, called FreeCast, seems to have a feature like that.

Last night at some absurdly late hour (as if 2:30am isn’t late) I read a the keynote from OLS. I was very impressed with the debunking of the “Linux has no device support” myth. It’s worth a read.

Saturday, April 29, 2006

TA and Publishing

Guess what! I just got hired on as a teaching assistant for Dr. Alan Manning’s Linguistics 430 “Theoretical Syntax” starting this fall. The fact that I got the high score on the final was probably a big help. I’m really excited because it’ll give me some great experience, and help me to keep everything I learned this semester fresh in my mind.

Also, my article “Gutenberg’s Heir: The Internet as an Agent of Linguistic Change” was published in BYU’s English Linguistics student journal, Schwa, Issue 1. While I’m not quite sure how you can get a hold of a copy, I’m very proud to see my work in print.

So, two big milestones for me in the past two weeks. Hooray for a great end of the semester! Almost as if in celebration, my friends and I all went camping and hiking last yesterday near Hobble Creek, close to Springville.


The Hikers


Glorious Crossing

Cool Flames



An Orange on Fire


The Source



The Real Source (closeup)

Wednesday, February 22, 2006

Radio Free Monticello

Join the fight to free the tenants! http://www.radiofreemonticello.info

Tuesday, February 21, 2006

NetLing Release and Website

From the Release Announcement:

The bits are on the wire and NetLing is live! See the wiki at http://www.netling.org/

NetLing is a tool to aid in historical analysis and live monitoring of lexical variation using Internet-available bodies of text as corpora (i.e. Web, Usenet, mailing list archives, IRC chat, etc.) The initial release is designed to analyze the correspondence of the Linux Kernel Mailing List, though expansion into a wider range of data sources is a priority due to the extremely technical nature of that list. The program itself is written in Ruby and designed to interface with a MySQL database, although efforts at database independence (to allow Postgres, Firebird, and so on) have been made, and will be a focus for the next release.

NetLing was inspired by the author’s observation that his English usage began to shift lexically away from American and towards British and continental European usage as he interacted in online mailing lists with people from those regions. Though the project initially focuses on English, its ultimate vision is to gain a view of past and current directions in the lexicon of many of the world’s languages.
The project is so far a one man show by Josh Hansen, an undergraduate student in linguistics at Brigham Young University. Help and answers are available at joshhansen@byu.edu

Saturday, January 28, 2006

Down with Eclipse.org’s Flirtation with Playboy

Okay, this irks me. Good old Eclipse, the Java development environment, is taking advantage of the generous offer of “Playboy Enterprises” to host a mirror site of much of its software. I publicly protest this tacit endorsement of one of the great producers of filth and destroyers of homes in our country. Eclipse Foundation, you have enough mirrors. Stop giving free PR to Playboy.

Tuesday, December 27, 2005

Longing and Delight

The books or the music in which we thought the beauty was located will betray us if we trust to them; it was not in them, it only came through them, and what came through them was longing. These things — the beauty, the memory of our own past — are good images of what we really desire; but if they are mistaken for the thing itself, they turn into dumb idols, breaking the hearts of their worshippers. For they are not the thing itself; they are only the scent of a flower we have not found, the echo of a tune we have not heard, news from a country we have never yet visited. — C.S. Lewis