Dabble DB

The Dabble Blog

Archives: November 2005

« October 2005 · December 2005 »

where x >= last thursday

David Phillips writes:

As simple and inviting as Dabble looks, I’m looking for something less managed, more “on the fly.” I noticed, for example, a Dabble screen showing selection of field type: number, date, etc. In my world, input for everything is text and the software makes sense of it depending on how you want to use it. For example, any of these expressions would be meaningful in a “date” field:

four weeks ago
next month

That’s a great example, and not too far off Dabble’s world either. As I mentioned earlier, all fields in Dabble start off as text, and you can enter whatever you like. At some point, you may choose to migrate to a date field - for example, to take advantage of the calendar views - but there’s nothing pushing you to do that up front. Even having done that, however, there’s no set format that you have to enter data in, and in fact we support entry very like what David is describing. These are all valid for a Dabble date field:

last thursday 2:30 - tue 1600
this month
tomorrow 3-5pm

If you enter these into a Dabble field, it will automatically convert them to a fully specified date range or point in time. But supporting the idea of “next month” or “10 days ago” is important for more than just convenient data entry. You can use the same relative date specifications to anchor a calendar view or filter a list of entries. For example, you might want to save a view that always shows you tomorrow’s schedule, that you can look at every night. Or you might want to create a report of invoices that are currently more than 30 days overdue. Dabble will let you create either one of those, and keep them constantly up to date. That’s something that would be almost impossible to support with the kind of mini-calendar date picker that’s so common on webapps these days, but is the most natural thing in the world with text. Unlocking that ability is a small, but important, equals-sign moment.


If you have 40 minutes or so to kill, you might be interested in watching the video of the Dabble demo we gave to the Vancouver Lisp Users Group last Thursday. (via Bill Clementson) Sorry, this video is no longer available.

Not all bases covered

With Google Base now released, and clearly not for private or complex data, it’s interesting to see how much pent up demand there is for what some people had speculated Base might be. Paul Kedrosky, for example, writes:

I’ve as much data I’d like to store as the next seven people, but Google Base isn’t going to be where it goes.

I wonder what a good alternative might be? ;)

Dabble Clip #1: Migration

We’re planning a series of posts on this blog entitled “Dabble Clips”. These will be short, silent movies illustrating some of Dabble’s more interesting and unique features, and accompanied by text describing how the features fit into some of the goals we’ve discussed. The first goal we’re going to tackle is this: Dabble should allow the user to incrementally build up an application. (For those who just want the eye candy, the link to the first clip is about halfway down this post.)

Andrew has posted before about why incrementality is so important, but it’s worth repeating some of his points. It is, first of all, unrealistic to think that you will get the structure of your application right the first time: every interesting system is rethought and refined with use. For many people, however, having to come up with a structure up front can be such a high barrier that they simply never start. I think that one of the reasons that spreadsheets get used so much more, in practice, than traditional database systems do is that you can simply start typing into a grid without worrying about defining a schema or providing types or even labels for fields. Only later, after entering some real data and getting a feel for the problem space, might you start thinking about feeding the spreadsheet more information (this column contains dates, this one currency), so that it can validate your data and provide more display or calculation options.

Although Dabble is very much a database and not a spreadsheet, that sense of just being able to sit down and start typing was something that we were very interested in capturing. For example, adding a new field in Dabble is trivial: there’s a link at the bottom of every form that prompts you for a name and adds your field instantly. All fields start out as text fields, so you can start entering data right away without thinking too far ahead. Only when you decide you want more out of the system do you need to migrate the field to a more specific type. Because Dabble aims to end up with a more structured application than a spreadsheet, however, the migrations (a developer might call them “refactorings”) need to be a fair bit more sophisticated than just reformatting your data.

Dabble Clip #1 (sorry, no longer available) shows me performing two of these migrations on a simple Todo List application. The first is fairly simple, the second more involved.

At the beginning of the clip, I configure what started out as a free-form Status field to use a restricted set of choices. Dabble performs the migration by collecting all of the current values in that field (in this case, just “Open” and “Completed”) and using them as the initial set of choices. From then on, the UI shows Status as a drop down list rather than a text input, either when editing an individual object or when filtering the whole category. This kind of migration is also useful when you’re importing data from a consistent external source, like a data dump from another system. For instance, when we first brought in the OSCON conference data to use as an example, we noticed that the Session Type field was regular enough to migrate from its text form to the menu you can see in the linked screenshot.

Before doing another migration, I add an “Assigned To” field and start entering data. At first I’m just typing in single names, but some tasks really need to be assigned to multiple people (Jason Fried might disagree, but hey, he can build his own version of this Dabble app). With a text field, the best I can do is type in “Avi & Andrew”, but that’s not going to scale. That becomes especially obvious when I try to group the todo items by responsible person: with that ampersand in there, there’s no way to properly see a list of just the items that are assigned to me.

So at that point in this somewhat accelerated evolution of the application, I do the second migration. I change the type of the Assigned To field from text to a List of Entries. An entry is a full row or object in my database; so far, I’ve been dealing exclusively with entries in the Todo category, but here I choose to introduce a new Person category. I also tell it to migrate by splitting on “&”, since that’s how I’ve been entering lists of items so far.

This migration does quite a bit at once:

  • It creates a new type of entry in the database, “Person”, and adds a “Name” field to it
  • It goes through all of the Assigned To values and splits them into multiple values, so that “Avi & Andrew” becomes two values, “Avi” and “Andrew”
  • It converts each of those values into a new Person entry, and puts the value into that Person’s Name
  • It links up all the Todo entries to the new Person entries. If two todo items’ Assigned To fields used to reference the same person by name, they will now link to the same Person object.

After the migration, what was once a flat table of todo items is now a network of interlinked entries. Each Person knows which todo items it’s linked to. We can even add a field to its own entry form listing them, the mirror image of the Assigned To field on Todo. And of course we can add more fields, fleshing out Person further, and then migrate them, and the iterations continue…

As a side note: since we plan to do more of them, we’re curious what you think of this form of entry: part screencast, part tutorial, part blog post. Useful, or trying too hard? Leave comments.

FAQ #126

Question (as phrased by Ronald Welch, one of the many who’ve signed up for Dabble information):

Who or what do I have to beg, borrow or steal from to get an early release copy of Dabble? My first born hasn’t materialized yet so there might be some room of negotiation there…. =)


Unfortunately, our payment processing isn’t yet equipped to handle first-born children. However, we really do want to let everyone interested take Dabble for a spin, so we’ve been busy setting things up to accommodate the great response we’ve received so far. The first set of invites went out earlier this week, and another batch is going out tonight. We’re ramping up slowly, so please be patient.

If you’re going to be in the Vancouver BC area, you can see a live demo of Dabble at the upcoming Vanlisp meeting on Thursday, November 17 at Think!.

« October 2005 · December 2005 »