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 http://notefuser.herokuapp.com. 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 new.familysearch.org and Geni.com 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 new.familysearch.org. 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:

http://rootstech.org/challenges/overview

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.

AncestorSync
and
FamilyHistoryNotebook

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');
    window.open(href, 'popup',
      'height=500,width=400,toolbar=no');
    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');
    window.open(href, 'popup',
      'height=500,width=400,toolbar=no');
    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.

my new blackberry pearl

I just got a new blackberry pearl for work. So far I really like it. It is amazing that you can type with such a small keyboard.

I’m writing this with my phone to practice typing with this little keyboard.

Maybe I’ll start to use twitter for more practice. Does anyone know of a good way to tweet from a blackberry?

[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.

Just got Grand Central!

I finally made it into the Beta of Grand Central! So far it seems really cool. I have 5 invites that I can give away to the first people who comment on this post.

If you haven’t heard about Grand Central, it’s a service that gives you a new phone number that you can use to route calls to any of your other phones. It offers Spam call filtering, a cool online voice mailbox, and click2call features.

One of the coolest features that I’ve seen is being able to seamlessly transfer a call from one phone line to another. So, say that someone calls you while you’re on the road, and you’re just getting home. You answer the call, begin your conversation, walk through your front door, press your * key on your phone and your home phone then rings. You pick up your home phone and continue your conversation on your land-line without using up more of your cell phone minutes!

It appears that most of the features will remain free after the Beta period, except for the click2call features, which will end up charging a per-minute fee.

Who else wants a Grand Central account?