jducoeur: (Default)
[personal profile] jducoeur
Related to the new changes in CommYou -- I've just added commands that let you turn CommYou off and on, on an ad hoc basis. This should hopefully be good enough for the time being. But I know what the next request is going to be: full-scale scheduling of that function. Certainly, if I really *needed* it to be consistently gone during work hours, that's what I would want.

That's on the story list, but I'm not going to deal with it for the time being, for the simple reason that it is *hard*. Really Hard. Those of you who haven't written scheduling apps don't appreciate what a pain in the ass they quickly become.

Yes, it looks straightforward enough: what's so hard about saying "turn off at 9am and on at 5pm"? The problem is, that's never really good enough. I mean, first you discover that you only want that schedule on weekdays, not weekends. (Or you are using this for work, so you only want it *on* during work hours.) Then there the consultants, whose definition of the workday is different. Then there are holidays. Then you find that you really need multiple schedules per day, because you want it *on* during the lunch hour so you can check in with folks. And of course, it's deathly important to turn it off next Sunday afternoon, because your grandmother will be visiting and god forbid that conversation about the bachelor party should come across while she's in the room. Etc -- before long, you're writing a complete scheduling app, and those really are a bloody pain.

(We spent a lot of time fighting these particular fires at Convoq, and never did manage to really get it right in any of the cases.)

What I find that I really want is a standard way for you to be able to say, "Here's my calendar, and this category of appointments are for CommYou". CommYou contacts it via some sort of API occasionally, or maybe even gets control signals *from* the calendaring app. You do all your scheduling through an app that's designed for the purpose; you therefore can manage all your schedules in one place; and I don't have to get into the hassle of building calendaring into an application that isn't *about* calendaring.

I'm sure that this could be done with Google Calendar, which is pretty open, but I dislike coding to proprietary APIs unless I must. What I want is a *standard* for this, so that you can be using Google, Microsoft, Zoho or Whatever, and just point CommYou at a URL, or point the calendaring app at CommYou, or something like that. CommYou and the calendar app talk, and you don't need to hassle further about it.

It's a standard the world really needs. And AFAIK, it doesn't really exist yet. There are standards for exchanging calendar data, but not really this kind of command-and-control API for *non*-calendar apps. There should be. I may yet build the CommYou side of this, and see about building one or two generalized plugins for the calendar apps to get the ball rolling...

(no subject)

Date: 2008-08-21 05:48 pm (UTC)
From: [identity profile] metahacker.livejournal.com
Yes, indeedy. I started designing this as a part of the scheduling app I didn't write, and got into a LOT of ratholes. On the flip side, it resulted in a new way of thinking about the 'todo' problem (as one of resource prioritization/utilization) which may be fruitful.

We might be having problems in different areas, though, so perhaps collaboration would yield results. Specifying (programatically) a schedule wasn't too hard -- it was essentially a priority set of sets of intervals, with higher-priority sets overriding lower-priority. (So, "Sunday 3-4 at grandma's" overrides "be available every Saturday and Sunday".)

The time-interval logic is all built, along with a base-line visualization...what really got thorny was letting the user *express* complex intervals. Falling back on NLP, even structured NLP, was driving me insane; but other methods seemed way too geeky, hardly better than cron's obfuscated syntax.

What kind of features do you need for CommYou? Is this "tell IM to alert me at these times, and not at these"?

(no subject)

Date: 2008-08-21 07:27 pm (UTC)
laurion: (Default)
From: [personal profile] laurion
Layered priorities strikes me as a good way to handle the edge cases, and seems to follow life scheduling fairly well. (I can give you a one paragraph summary of my standard week, and then whole volumes on the deviations.)

iCalendar

Date: 2008-08-22 01:42 am (UTC)
From: [identity profile] metageek.livejournal.com
Look at the iCalendar spec; it's a lot more capable than...well, than it should be. The recurrence rule syntax is particularly convoluted, and can probably express most priority rules, since it has EXRULE (basically, set subtraction). See, some of the people who participated in the working group wanted to be able to use it for process control.

I'm not saying it's an ideal solution, but it is at least a standard; you can use it to talk to other people, you can (probably) find a library to implement it, and you can save yourself the effort of designing your own protocol. Spend the time on something more directly related to user value.

Re: iCalendar

Date: 2008-08-22 02:32 pm (UTC)
From: [identity profile] metageek.livejournal.com
Oh, I see—you're pushing back the scheduling problem another level.

(no subject)

Date: 2008-08-22 02:25 am (UTC)
From: [identity profile] metahacker.livejournal.com
Mmm. I see. So you want a scheduling daemon that has permission to tell other bots what to do, and that takes input from...wherever. Sounds like a useful module indeed. It's effectively what cron does, but with multiple users and permissions, and more complex specifications of times and more complex messages than simply "run this". (Though of course "run this" is a Turing-complete message...)

Then the specification routines/UI can be a separable piece entirely, written by someone with UI clue. Or have multiple UIs, depending on your needs. Hurray for SOA.

Multiple UIs

Date: 2008-08-22 03:59 am (UTC)
From: [identity profile] metageek.livejournal.com
Then the specification routines/UI can be a separable piece entirely, written by someone with UI clue. Or have multiple UIs, depending on your needs. Hurray for SOA.

Unfortunately, the experience of iCalendar says that, if your protocol is powerful enough to do everything everyone wants, people won't be able to write reasonable UIs that handle the whole thing, so they'll implement subsets. This wouldn't be so bad, except for the fact that everybody implements a different subset. That's why someone using, say, Notes, can send a meeting invitation to someone using, say, Evolution, or vice versa, and discover that they've used recurrence features that the invitee can't understand.

Maybe iCalendar isn't such a good choice for this problem after all. :-(


Profile

jducoeur: (Default)
jducoeur

July 2025

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27 28293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags