Re: [calsify] JSCalendar: alternative to current all-day events

Marten Gajda <marten@dmfs.org> Mon, 17 June 2019 21:48 UTC

Return-Path: <marten@dmfs.org>
X-Original-To: calsify@ietfa.amsl.com
Delivered-To: calsify@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 34943120180 for <calsify@ietfa.amsl.com>; Mon, 17 Jun 2019 14:48:52 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.997
X-Spam-Level:
X-Spam-Status: No, score=-1.997 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=dmfs.org
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hZVb9gtMCQSS for <calsify@ietfa.amsl.com>; Mon, 17 Jun 2019 14:48:48 -0700 (PDT)
Received: from mailrelay4-1.pub.mailoutpod1-cph3.one.com (mailrelay4-1.pub.mailoutpod1-cph3.one.com [46.30.210.185]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B1E441200D5 for <calsify@ietf.org>; Mon, 17 Jun 2019 14:48:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dmfs.org; s=20140924; h=content-type:in-reply-to:mime-version:date:message-id:from:references:to: subject:from; bh=hwyylLAR+liy82Tt8k6uwCj3O54NO34/W1PiduBqebY=; b=mDVX3JnDGrIYr7/2necYjH0HE/SLwZbo81wOv8n+fZg4qXtu4/EEydhYWPJH1+JZ40/Ac77MmK68C jiPiSAStF2Ra1Qqkr+s3gfki6HwS/J27snfXlC8IshycnjyorzxuYgMaHKlvc2Q8dMmaNpJ7xGFqnU fDh66KYJO/GCoViA=
X-HalOne-Cookie: 0e903284a5afbebf0755b8e8045914f955e06bcf
X-HalOne-ID: ac9c773a-9149-11e9-abcd-d0431ea8bb10
Received: from smtp.dmfs.org (unknown [2003:5f:6e14:3c00:201:2eff:fe40:2624]) by mailrelay4.pub.mailoutpod1-cph3.one.com (Halon) with ESMTPSA id ac9c773a-9149-11e9-abcd-d0431ea8bb10; Mon, 17 Jun 2019 21:48:42 +0000 (UTC)
Received: from boss.localdomain (p548B1ED8.dip0.t-ipconnect.de [84.139.30.216]) by smtp.dmfs.org (Postfix) with ESMTPSA id 6473686 for <calsify@ietf.org>; Mon, 17 Jun 2019 23:48:42 +0200 (CEST)
To: calsify@ietf.org
References: <7ec4462f-9e69-409e-9925-6f0beae7424c@www.fastmail.com> <8591f785-e075-4e71-b1ef-b30afe11aa5a@www.fastmail.com> <DM6PR15MB3531538370731F00D0363A6CE3EB0@DM6PR15MB3531.namprd15.prod.outlook.com> <d102be8b-1dfd-444c-ab5b-ecf898d7a8e3@www.fastmail.com> <3d19b106-c5ae-0bfe-7afc-72540ea10623@dot.ee>
From: Marten Gajda <marten@dmfs.org>
Message-ID: <246c6142-45c3-e7ed-259d-02646a07b171@dmfs.org>
Date: Mon, 17 Jun 2019 23:48:41 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0
MIME-Version: 1.0
In-Reply-To: <3d19b106-c5ae-0bfe-7afc-72540ea10623@dot.ee>
Content-Type: multipart/alternative; boundary="------------730C7293DC0DBE5617229425"
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/calsify/1umYORSAy-CAoOxUcdfXr-Hu_4I>
Subject: Re: [calsify] JSCalendar: alternative to current all-day events
X-BeenThere: calsify@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <calsify.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/calsify>, <mailto:calsify-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/calsify/>
List-Post: <mailto:calsify@ietf.org>
List-Help: <mailto:calsify-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/calsify>, <mailto:calsify-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 17 Jun 2019 21:48:52 -0000

Hi Andri,

Am 17.06.19 um 19:44 schrieb Andri Möll:
>
>> If the JSEvent timeZone is null, the start time has zero time, and
>> the duration is a multiple of days or weeks, then DTSTART is of type
>> DATE. In this case, clip off any non-zero time from the recurrence
>> rule "until" property.
>
> This probably got covered early in JSCalendar's life, so apologies for
> bringing it up again, but how did JSCalendar end up with no date type?
>
Indeed we've been talking about this and there was mostly consensus in
that a date type (as used in iCalendar) encodes two things:

* value: a point in (local) time, i.e. midnight (the start) of that
particular day
* presentation: show as all-day

These are, however, two unrelated things. "all-day" is really just a UI
issue and has no effect on the calendar math. Aside from the
presentation, an all-day event is the same as an event which explicitly
starts at midnight and has a duration of full days. There are even use
cases when you might want to present an event like an "all-day" event
even though it doesn't have a duration of full days or even though it
may not start or end at midnight.

Also, sometimes, the date type falsely suggests an interpretation as a
range (midnight to midnight). I've seen discussions on whether a
date-type EXDATE would cancel all/any occurrences of a recurring
date-time event on that day.

In addition:

DTSTART:20190617

is the implicit form. It implies a time component of 00:00:00 and a
presentation as all-day event, whereas

start: 2019-06-17T00:00:00
isAllDay: true

is the explicit form. Both properties are explicitly stated.

>  I'm willing to take bets there will be implementations that miss the
> "timeZone is null" clause and accidentally truncate timed events with
> nominal durations.
>
This is actually a perfect example for why the implicit date type is a
bad idea and why the explicit form of JSCalendar is much better. You
have to make sure *all* preconditions (implications) are met before you
can use the implicit form. This is not an issue with the explicit form
and it's not a problem of JSCalendar (the problem is iCalendar).

JSCalendar is supposed to be the successor of iCalendar and to fix some
its well known issues. This is one of them. Eventually JSCalendar will
replace iCalendar and the conversion won't be necessary anymore. A
correct data model has a higher priority than the conversion to legacy
formats.

> And while on the subject, isn't calling the date-time formats
> `UTCDate` and `LocalDate`
> (https://tools.ietf.org/html/draft-ietf-calext-jscalendar-15#section-3.2.1)
> slightly misleading given they're date-times?
>
I have no strong feelings on this particular issue. Given that, in the
current spec, *all* date values have a time component there is no need
to emphasize this fact again in the name of the type. On the other hand
I wouldn't mind if these were called "UTCDateTime" and "LocalDateTime".

Cheers,

Marten

> On 6/17/19 4:22 PM, Robert Stepanek wrote:
>> Hi Daniel,
>>
>> I am not aware of any open points, the draft includes all feedback we
>> got.
>>
>> I suggest to move this document forward, irrespective of its
>> accompanying informational RFC
>> https://tools.ietf.org/html/draft-ietf-calext-jscalendar-icalendar.
>> <https://tools.ietf.org/html/draft-ietf-calext-jscalendar-icalendar>
>> I will update the latter in the next few days.
>>
>> Cheers,
>> Robert
>>
>> On Mon, Jun 17, 2019, at 6:18 PM, Daniel Migault wrote:
>>>
>>> Thanks Robert for the clarification. If there are any other point to
>>> discuss or that are raising concerns, please let us know as we are
>>> close to move the document forward.
>>>
>>> Yours,
>>>
>>> Daniel
>>>
>>>  
>>>
>>> *From:* calsify <calsify-bounces@ietf.org> *On Behalf Of *Robert
>>> Stepanek
>>> *Sent:* Monday, June 17, 2019 12:15 PM
>>> *To:* calsify@ietf.org
>>> *Subject:* Re: [calsify] JSCalendar: alternative to current all-day
>>> events
>>>
>>>  
>>>
>>> I have uploaded RFC draft version 15 which now includes the proposed
>>> changes. I chose to keep the name "isAllDay" for the property,
>>> rather than renaming it to "showAsAllDay". I also removed the
>>> "isAllDay" property entirely from the JSTask object.
>>>
>>>  
>>>
>>> See
>>> https://tools.ietf.org/html/draft-ietf-calext-jscalendar-15#section-5.1.4
>>>
>>>  
>>>
>>> From my initial analysis, the mapping to iCalendar is rather simple:
>>>
>>>   * If the JSEvent timeZone is null, the start time has zero time,
>>>     and the duration is a multiple of days or weeks, then DTSTART is
>>>     of type DATE. In this case, clip off any non-zero time from the
>>>     recurrence rule "until" property.
>>>   * Otherwise map "start" to a DTSTART of type DATE-TIME.
>>>   * I also consider using a new iCalendar boolean property
>>>     IS-ALL-DAY to cleanly map "isAllDay".
>>>
>>>  
>>>
>>> I will update the informational iCalendar mapping guideline accordingly.
>>>
>>>  
>>>
>>> Cheers,
>>>
>>> Robert
>>>
>>>  
>>>
>>> On Thu, Jun 6, 2019, at 5:56 PM, Robert Stepanek wrote:
>>>
>>>     One of the repeatedly discussed topics in JSCalendar is how to
>>>     model all-day events.
>>>
>>>      
>>>
>>>     Specifically, variants of the following uses repeatedly come up,
>>>     where the current JSCalendar model seems not to be adequate:
>>>
>>>      
>>>
>>>       * Calendar users create an event starting e.g. 8am and ending
>>>         7pm, but want to view this an all-day event in their UI. The
>>>         current model misses a flag to express this, as the isAllDay
>>>         property is not appropriate to indicate the user intention.
>>>       * Calendar users want to set their calendar on their birthday,
>>>         when they only would like to set it for the complete day in
>>>         their usual time zone. They still want it to show up as an
>>>         all-day event in their UI.
>>>
>>>      
>>>
>>>     In both cases, developers thought to use the isAllDay property
>>>     to express a user intention, but came they learn they couldn't.
>>>
>>>      
>>>
>>>     This is reason enough to revisit that part of the specification
>>>     and discuss alternatives.
>>>
>>>      
>>>
>>>     *Currently*:
>>>
>>>       * Any event MUST define a start property value in the form
>>>         "YYYY-MM-DDTHH:MM:SS[.DIGITS]"
>>>       * An all-day event:
>>>
>>>           o MUST have the isAllDay property set to "true"
>>>           o MUST NOT have a non-zero time in the start and duration
>>>             property values
>>>           o MUST NOT define a time zone
>>>
>>>       * Any other event:
>>>
>>>           o MUST have the isAllDay property set to "false"
>>>           o MAY define non-zero time  in start, duration
>>>           o MAY set a timeZone.
>>>
>>>       * This allows to model iCalendar DATE, local DATE-TIME,
>>>         floating DATE-TIME, UTC DATE-TIME.
>>>
>>>      
>>>
>>>     *Alternative*:
>>>
>>>       * The isAllDay boolean property gets removed.
>>>       * A new showAsAllDay boolean defines how the user intends to
>>>         view this event. Setting this property does not have any
>>>         implications on the allowed values in the event time properties.
>>>       * The start, duration, timeZone properties and their
>>>         recurrence overrides can all can be defined independently.
>>>         The recurrenceRule{until} property also can be defined
>>>         independently.
>>>       * It is up to implementations to convert this time model to
>>>         iCalendar. Most probably:
>>>
>>>           o an event with zero time in start, duration, until and no
>>>             time zone will be converted DATE value types
>>>           o an event with no time zone will be converted to a local
>>>             DATE-TIME without TZID
>>>           o otherwise it will be a DATE-TIME with TZID or UTC DATE-TIME
>>>
>>>      
>>>
>>>     What do you think? Did we miss something?
>>>
>>>      
>>>
>>>     Cheers,
>>>
>>>     Robert
>>>
>>>      
>>>
>>>      
>>>
>>>      
>>>
>>>      
>>>
>>>      
>>>
>>>     _______________________________________________
>>>
>>>     calsify mailing list
>>>
>>>     calsify@ietf.org <mailto:calsify@ietf.org>
>>>
>>>     https://www.ietf.org/mailman/listinfo/calsify
>>>
>>>      
>>>
>>>  
>>>
>>
>>
>> _______________________________________________
>> calsify mailing list
>> calsify@ietf.org
>> https://www.ietf.org/mailman/listinfo/calsify
>
> _______________________________________________
> calsify mailing list
> calsify@ietf.org
> https://www.ietf.org/mailman/listinfo/calsify

-- 
Marten Gajda
CEO

dmfs GmbH
Schandauer Straße 34
01309 Dresden
GERMANY

phone: +49 177 4427167
email: marten@dmfs.org

Managing Director: Marten Gajda
Registered address: Dresden
Registered No.: AG Dresden HRB 34881
VAT Reg. No.: DE303248743