Wednesday, October 12, 2011

LINQ2GEDCOM

I haven't done much with that gNealogy project in a while, mostly because it's in a state where the next step is visualizations of the data and I'm just not much of a UI guy in that regard. Maybe a flash of inspiration will hit me someday and I'll try something there. But for now I'm content to wait a little longer until Adrian has some space clock cycles to make some pretty visualizations for the project.

One thing never quite sat right with me, though. I'd encapsulated the data access behind some repositories to hide the mess, but it was still a mess. (And still is, until I replace it with my new thing.) I wanted to make something better. Something more streamlined. And, after reading C# in Depth (almost done with it), something more elegant and idiomatic of the language.

So I've set out to create a LINQ data context for GEDCOM files. Much of the data context and IQueryable stuff came from a tutorial I found online. There are several of them, but this one seemed just right for what I was doing. I've extended the functionality to add more entity types, made the tutorial-driven stuff generic for those types, etc.

All in all, I'm really happy with where this project is going so far. There's still a lot to do, and there may still be better ways to do a lot of it. But what it supports already in terms of file data and interacting with the data source (including writing changes back to the file, something that gNealogy never had) is already pretty cool. There's a bit of clean-up left to do in the wake of new features, especially after today's changes, so it's not production-ready by any means. But the main thing is... it's a lot of fun.

So this leaves the current state of my GitHub repositories as:
  • LINQ2GEDCOM - Currently in active development.  Lots of features to add.  My favorite work yet.
  • gNealogy - Not actively being developed right now, but still good.  I need to add the use of LINQ2GEDCOM once that's ready, which would make this one a lot simpler.  I'd also like to change around some of the overall structure here.  The main thing is, it's ready for visualization development if anybody wants to do that.
  • FormGuard - That simple little jQuery plugin I wrote a while back.  Nothing special, certainly nothing to write home about, just a quick proof of concept for myself in terms of writing a jQuery plugin.  Hopefully a stepping stone to more as the need arises.
  • MarkovSmirnoff - A silly little Markov Chain text generator I wrote because Trevor and I wanted to generate random text for some stuff.  It's not elegant, it's not particularly great, it's just fun to play with.
  • CommonUtilities - Nothing special here at all.  This is mostly a placeholder for a personal utility library I'd like to keep around.  I put some of my older stuff in here, but the implementations need to be improved quite a bit.  There's lots to be added here.
And just when I thought that was enough, Trevor had an awesome idea for a game that I want to implement in HTML5/JavaScript.  Hopefully we can get that project off the ground so I can share it here as it grows.  But it's the kind of project that's going to take a lot of planning and design work before any actual coding can begin, so it'll probably be a while.

I love it when a plan comes together.

No comments:

Post a Comment