RootsTech 2013

RootsTech was big this year. I can’t believe how big it has grown. The keynote moved into last year’s expo hall for larger seating capacity and the keynotes were pretty packed. On top of that, select conference sessions were streamed to thousands of attendees around the world.

The predominant theme of the conference was centered around capturing, preserving, and sharing our own life stories and the life stories of our families. This is a theme that resonates very well for me as the story is what got me hooked to family history.

Unfortunately, I had to skip out of the conference early in order to attend a scout camp, so I missed the last couple of sessions of the developer day. I was able to attend some very good sessions about the historical-data microdata format, the Clojure programming language, and using triple stores for graph searches. The sessions I wish I could have attended were the FHISO and GedcomX presentations.

I spoke with several developers at the conference who said that they wished RootsTech would hold the Developer Day on the Wednesday before the conference. George, from MyHeritage/Geni said he thinks they would send their whole team out for that. Robert, from Google said that he missed the developer-centered feel of the first conference and agreed that holding the developer day the day prior would be a good move. I hope we can do it, so that the vendors who come out to the conference can attend sessions and not feel that they are losing sales by leaving their booths.

I met some great people this year at the conference and I was able to catch up with a few people in the vendor area. This is perhaps my favorite thing about these conferences. There are so many smart and friendly people who are creating innovative products to serve the genealogical community.

I met Tammy, the winner of this year’s developer challenge. She is friends with Brooke who was a winner from last year’s conference. I was able to catch the two together at the booth. Tammy’s story is very inspiring. She came to RootsTech for the first time last year, and came away knowing that she had to jump in and build this product. A couple of months later, she quit her job to work on it full-time. She pulled off a very impressive product and I’m happy for her success.

Me, Brooke, and Tammy – 2012 and 2013 winners of the RootsTech Developer Challenge

I’m excited to try out the new products that were exhibited in the expo hall. It is great to see that the industry is still moving in a positive direction.

I already can’t wait until next year’s RootsTech conference. I expect it to once again be bigger and better.

RootsTech Developer Challenge Afterthoughts

So, yesterday my NoteFuser entry won the Grand Prize in the RootsTech Developer Challenge. With that came a whirlwind of emotions both good and bad.

First of all, I feel extremely honored that the judges saw value in the work that I created. If you want to check out the app, you can get it at Lots of people have asked me what I’m going to do with it: commercialize? sell it? what? Right now, I’m leaning heavily towards preparing the code to become Open, so someone else could take it, extend it, and fully support it. I’m not really interested in trying to run a commercial entity in the genealogy space. The rest of this post may explain why.

I’d like to say that I care deeply about my relationship with developers in the RootsTech community. I’ve always said that I work for the genealogy industry. What I mean by that is that I want to see companies succeed. I love seeing new products and ideas take off. Truly, in the deepest part of my heart, I desire to see the industry move forward, and to me, that means seeing lots of ideas, companies, and individuals succeed in this space.

This is why I love RootsTech. For me, it’s a time when other developers—who I truly consider friends—come together to take their companies, products, etc. to the next level.

Today, I received a comment today along the lines that a FamilySearch employee shouldn’t have been allowed to win the RootsTech Developer Challenge. That comment made me feel like there may now be a wedge of sorts between me and certain members of the community, and I hate that and apologize if I have offended any of my colleagues in the space.

My intent on entering the challenge was that I simply wanted to build something that solved a problem that I’ve wanted to solve for a long time: bridging my Evernote notes with my and tree records. The developer challenge gave me the motivation to set a hard deadline, work like crazy during evenings and weekends, and prove the concept. I worked really hard to create something that would potentially benefit genealogists that may wish to solve the same problem I was facing.

Of the other 5 Developer Challenge submissions, I think they were all awesome and I congratulate the developers that put their hearts and souls into building their innovative products. During a conversation at lunch, I discovered another entry from a BYU student, that wasn’t in the final 6, that was all about integrating a reputation system of sorts into I think that’s a fantastic idea, and I applaud his effort. I’m sure there were a ton of other great entries in the challenge. I hope I get to see those entries and perhaps I can do something to contribute to those ideas to help them succeed.

[Update: When I wrote this, the following information hadn’t been released]

At the beginning of the Keynote today, David Burgraaf released a URL of participants. You can find that here:

A few of the other participants you have to check out include. Honestly, if I were judging, I would have placed the following far above NoteFuser.


Unobtrusive JavaScript on Dynamic Content

I’m working on a web application outside of my FamilySearch work that requires a lot of AJAX behavior. I have been using Prototype with Rails’ Prototype Helpers, but this is beginning to become a unwieldy.

The content I load can get very large with TONS of inline JavaScript, so in an effort to trim down the html and improve performance, I’m beginning to use Unobtrusive JavaScript methods. While I do this, I’m also doing a migration to jQuery.

I had seen a lot of code examples that looked like this:

jQuery(function($) {
  $('a.sidenote').click(function() {
    var href = $(this).attr('href');, 'popup',
    return false;

This seemed to work for event listening on elements that were loaded as the page loads, but I have lots of content that is loaded via AJAX methods after the document loads. I needed something that would bind the listeners not only at the time the document loaded, but would continue to bind event listeners to new content that matched the given selectors.

I later discovered the “live” method. This does exactly what I want it to do. Instead of just registering a click, I call live, so the above example would change to:

jQuery(function($) {
  $('a.sidenote').live('click',function() {
    var href = $(this).attr('href');, 'popup',
    return false;

This doesn’t require a big change in code, but the approach is much more powerful and truly allows you to make your JavaScript unobtrusive.

Windows XP PATH not interpreting environment variables

This one took me a while to figure out. I have my PATH environment variable set up to include other paths that are also defined by an environment variable. For example, I have Maven set up in the following way:

M2_HOME = C:\Program Files\Apache Software Foundation\apache-maven-2.0.9
M2 = %M2_HOME%\bin
PATH = %M2%;[a whole lot of other dirs]

Today, I tried to run a Maven build, and it wasn’t recognizing the maven\bin in my path. When I did an echo on my path, the path had the following:

%M2%;C:\Program Files...

instead of

C:\Program Files\Apache Software Foundation\apache-maven-2.0.9\bin

which would be the value of %M2%

When I did:

echo %M2%

I got the full path C:\Program Files\Apache Software Foundation\apache-maven-2.0.9\bin

What was going on?

Well, apparently, Windows has a limit on the size of your path and when it hits that limit, it just stops interpreting your %VARIABLES% set in the path.

So, the solution is to either reorganize all of your files into more succinctly named directories, or remove some of the dirs from your path.

Thanks M$. Hope this helps someone else.

[Gmail Tip] is:unread in:inbox

If you find yourself falling behind in getting all of your emails read, like I have in the past week, you may find it useful to put the following in your Gmail search:

is:unread in:inbox

This will filter your messages to just those that are unread and in your inbox. Pretty cool. This help a lot for me because I have a lot of filters on my mail that mark some mailing list emails as ‘read’ and put others under different labels without marking them as read.