Archive for the 'Development' Category

July 13th update

It feels like it’s been forever since I last posted. First off, I set up a Basecamp project for me and the other two programmers, which is helping with keeping track of milestones and to-do items. I’m liking it a lot. :)

We’ve also moved the new URL (which we’ll disclose in a week or two when we’re ready for beta testers) to a set of dedicated servers. Which also means that we can use Subversion on them (and we are), rather than on Sourceforge’s servers. I hadn’t used SVN on Mac/Unix before this, but it’s easy and all is going smoothly.

Finally, as far as the actual coding goes, I’ve got most of the user authentication stuff working. (It was a stupid error. :)) I’ve set some ambitious deadlines for each stage of the project — and when we get a little bit further along and I have a more accurate assessment, I’ll make some of those known, particularly the launch deadline — and even so, I’m almost positive we can make it happen.

One last thing: since this is going to be a subscription-based membership (well, most everything will be free, but there’ll be a higher-level pay-per-month membership that’ll help us have the money to deal with growth when/if that happens), I’m not sure yet if the code will be open source. I want to open source it all, but my business sense tells me that’s probably not a good idea. My guess is that we’ll extract parts of the code and open source them. We’ll see. Whatever ends up happening, rest assured that “Don’t Be Evil” is my motto and that I’ll do my best to make it open and as free as possible. I’m not in this for the money. In fact, there was a brief moment when I thought about how rich I could get (assuming this whole thing flies), but it almost instantly sucked out all the energy I had towards working on the project, stopping me dead in my tracks. I can’t do this for money. That’s not how I work. Which is good. :)

The tenth of July

Got the people list working, along with a few little bits and pieces here and there. It’s time to write out a roadmap and set some deadlines. I’m a lot more comfortable with Ruby on Rails now than I was two weeks ago, and it’s making a huge difference. I love Rails. :) Anyway, I’ve still got to figure out how the linking is going to work — the idea is clear in my head, but I don’t have a clue how the user interface will be. Yet. :)

On the road to beta

I’ve got a Ruby on Rails prototype of the site almost up. The core stuff works (people and families in the database, navigating between people and families, etc.), and I’m amazed I was able to get that much of it done in a single afternoon. Ruby on Rails rocks. :) At the moment I’m trying to get the login/authentication system working. Hopefully by tomorrow. At this rate, I’ll have a testable beta up long before the end of August. Good. :)

Dare mighty things

I’m in the midst of sketching out what objects I’m going to need (user, person, family, message, image, relationship, etc.), along with what methods each will have. It’s elucidating. I’ve also started mapping out a URL schema (which will end up being tightly knit with the methods just mentioned).

You know, this time around, everything feels so much easier. Not that I got very far with my previous attempt, but even so, the path is clear where it was dim and murky before. And I can fit the whole thing in my head, which was something I was unable to do before. More importantly, I’m almost 100% sure now that I can do this. The mammoth project is now feasible.

But of course the doubts come flying at me every few days. That’s why I’ve started reading these quotes every day:

You must do the thing you think you cannot do. – Eleanor Roosevelt

Far better is it to dare mighty things, to win glorious triumphs, even though checked by failure…than to rank with those poor spirits who neither enjoy much nor suffer much, because they live in a gray twilight that knows not victory nor defeat. – Teddy Roosevelt

It makes a huge difference. :)

June 29 Update

I’ve been working on the pedigree display code. It’s still not entirely clear in my head, which makes it hard to put together. :) At the moment I’m taking the database and exporting the selected individuals/families into an XML tree, which I’ll then be able to parse into a pedigree in HTML/CSS. I don’t know if this is the best way to go about it, but if it proves to be a problem, I’ll come up with something better. In the meantime it’s probably more prudent to go ahead with it and get *something* up, which I can then tweak as necessary.

(So much for imaginative titles. Oh well. :))

Another quick update

Got the family links working. One other problem with having so many relationship links is that the code gets a little ugly. Hmm. I’ll have to see if there are any alternatives that 1) still give me enough flexibility and 2) are beautiful. Anyway, coding Ruby on Rails is a lot of fun now that I’m actually coding instead of just thinking about it. :)

A quick update

I’ve been working on importing the family links from the GEDCOM. Almost there. Once I get that into the database, the pedigree display will be next. I’ve worked out most of the algorithm, though I haven’t yet decided whether it’ll be better to use a flat array for the data (and pull them out by ID) or use a tree (XML DOM, most likely). We’ll see… I should have more time tomorrow to work on this. I’m finding that large blocks of time (two or three hours) are when I get the most work done, especially once I get into the groove. Maybe I’ll start waking up at 3 or 4… Or maybe not. :)

On relationships

I’ve been working on Beyond for the past five hours or so. Worked on the database schema, realizing I’d forgotten about translations and a few other things (tags). Split the schema into four separate stages, which roughly parallel development on the program. Then I started work on a little Ruby on Rails app to create the database (via migrations) and populate it (by loading an XML file created from a GEDCOM). So far it’s working okay, and it’s giving me an opportunity to rethink some decisions.

As it stands, the current model has everything (name, gender, UID, etc.) as a characteristic which gets linked to the person via a relationship. So the People table itself only stores the ID, really. This means lots of characteristics and even more relationships. Hmm… The flexibility of the current relationships table means I can relate any two records in the database (two events, or an event and a picture, for example). But is that even a good idea? I guess my main concern is having a huge, unwieldy relationships table. We’ll have to see if the benefits of flexibility outweigh the downsides.

Anyway, now that I have some real data, I’ll be working on integrating it with the mockups (pedigree and so on). And then, after I figure out a good navigation scheme, you’ll be able to load a GEDCOM and view it online. Small steps. :)

A handful of ramblings

First off, I’ve been reading the GENTECH Data Model spec. I read it years ago, when I was working at Ancestry, but time erases a lot of details. :) Anyway, it’s interesting food for thought. I don’t think I’ll end up adopting it (at least not wholesale), but it does have a lot of good ideas. I like the idea of being able to associate dates and places with characteristics (so you can say, “John Smith was a farmer from 1730 to August 1749 in Hartford, Connecticut”).

OpenID caught my interest today, primarily because of the easy sign-in capability. I’m still not entirely sure how it works, or if it’s even desirable for Beyond (genealogy may be a touchy area as far as that goes), but it’s definitely an option. I do plan on having MicroIDs implanted in the header of user’s pages, which’ll make it easy to use claimID to say “This is my genealogy.”

Coding-wise, I took some Ruby code to convert GEDCOM to XML and started writing some classes which convert the XML to Ruby objects. (Eventually the XML will disappear, of course; this is just a temporary hack to get some data to work with.) Once that’s done, I’ll write code to import the Ruby objects into the database, and then it won’t take long before the prototype goes live.

Speaking of the database, I’m almost done drafting the data model (and GENTECH is influencing a few things here and there). One issue I came up with a tentative solution for is that of sources. Ideally, you should be able to add a source to any bit of data that could reasonably have a source. So, to that end, I think the Sources table is going to be open-ended — instead of having a set list of types, there’ll be an “object_id” field and an “object_table” field, which means I can add a source to anything that shows up in a table.

But that’s still not enough, at least not yet. For example, events will include fields for the date and the place, preventing a source from being added specifically for the date (or the place), and instead forcing it to be added for the event as a whole. Hmm. The idea of being able to source everything is really nice, but is it feasible without turning the database into a mess?

One last thing. For storing information about individuals, I’m thinking about using a similarly flexible system: everything gets stored as a key/value pair. So instead of having set fields, you’d just add a “first_name” key and fill in the value. If there’s no middle name, you don’t have to add a middle name. The advantage is that you don’t have to use fields you don’t need, and you can use other fields that you do need (and that I’ve never heard of). The disadvantage comes in displaying the information and ordering it into groups. But maybe I could include a groups table, so you could put all the name information and gender and birth/death information into a “Vitals” group (or whatever you want to call it). Hmm… I’m considering the possibility of using templates to make this kind of thing easier for newbies — a scaffolding with common keys already in place for you to use.

End brain dump. :)

Dates and stuff

I’ve been reading the W3C’s internationalization (i18n) page, since Beyond will be a global app almost from the get-go. It’s really important that it support not only other languages, but also the cultural aspects that come with them — date and time formats and script direction, for example.

As far as dates go, don’t forget that genealogy often deals with incomplete dates — just a year (”1775″), or just a month (”March”), or ranges (”before 1933″, “about 1854″). This makes date storage just a wee bit tricky, since the standard SQL date format wants more detail. Storing as a string takes care of the flexibility, but searching by date then becomes harder if you include ranges on the search form (1816 +/- 5 years). I’m still not sure how this’ll work. (Gee, I seem to be saying that a lot lately, don’t I. :))

And back to the translation issue: because different languages take up different amounts of space (Arabic is more compact than English, which is more compact than Finnish and German), designing the page can lead to headaches. It’s something you have to keep in mind the whole time. (Unless you’re only developing for English. But I’m not.)

Finally, as for dealing with the actual translating of the app, I’ll probably put together a simple web interface to the database, which volunteers can then access to translate the various terms. (We do something similar here at work, where our main site — http://immigrants.byu.edu/ — is available in six different languages.)

 
order generic viagra accutane online find cheap viagra buy generic soma price of clomid cialis online cheap viagra drug drug cialis buying generic viagra pharmacy cialis buy cheapest viagra purchase soma viagra cost order cialis viagra for sale buy cialis purchase synthroid online generic zithromax viagra overnight shipping cheapest viagra online cheapest zithromax cheap cialis tablet buy viagra from india acomplia prescription buy viagra no prescription required levitra pharmacy buying generic cialis buy zithromax without prescription lasix online viagra buy online zithromax without a prescription buy cialis from canada purchase viagra overnight delivery cialis for sale levitra online stores buy acomplia without prescription cheap generic levitra cheap propecia online cheap price viagra buy cheap viagra internet synthroid pharmacy viagra online cheap cialis uk cheap viagra from uk cheapest generic cialis online buy cialis in canada accutane pharmacy find cialis no prescription required order acomplia cheapest propecia price of acomplia buy generic cialis viagra in bangkok buy cheap propecia online buy lasix purchase levitra online find cheap viagra online buy discount viagra online clomid pharmacy clomid without a prescription buy generic acomplia soma prices cheapest soma buy zithromax lasix prescription viagra discount levitra without a prescription buy zithromax cheap acomplia pills cheap accutane cheap viagra overnight delivery soma buy viagra us