An idle thought for the future of Fedora Calendaring

Continuing the discussion from Considering a general reorganization of this site!:

So, I dropped this thought last night in the Websites and Apps matrix channel, but I suppose I should also write it somewhere more permanent.

Fedocal has served us well for the last seven years (I think actually even before that, but that’s the oldest archived hit). It’s been awesome and incredibly useful. But it also needs an update, both in function and in UI.

I know this is on the Websites and Apps Team radar, which is awesome, because we rely on this tool and some of the improvements would be Kind of A Big Deal.

I want to throw out a thought, though.There is a Discourse Calendar plugin, and … perhaps we could use that? It’s definitely not at feature parity at this point, but maybe it’s something we could contribute to (particularly, the “events” part — see this long thread.)

This just an idea. A re-vamped fedocal would be cool too, but I think we’d largely be going it alone with that. It seems like it might be valuable to join in with some other project. It also doesn’t have to be “use Discourse for everything!”… that just happens to be where I am right now. :classic_smiley:

1 Like

One of the useful things Fedocal does is allow us to “reserve” meeting channels (it has some failings in that regard, but it mostly works). How would that work if we switched to using Discourse?

I do not think the plugin currently has the necessarily functionality to do that well. And to be clear, it’s missing a lot of necessarily functionality we’d need. Like, “recurring events” is on the (undefined schedule) roadmap.

Another possibility would be to find an open-source WordPress plugin and make the Community Blog the calendaring nexus.

Historically, we asked people to put their vacation schedules in the calendar. I see a few folks are still doing that.

We have an Events calendar, but we don’t… really use that. We probaby should? But right now, underused.

I’m not sure about the vacation calendar just from a privacy perspective. So I’m going to ignore it for a moment. And leaving that aside, the meeting channel reservation thing is the most important. And for that, perhaps this: Book a Room – WordPress plugin | could be starting point.

Oh! I shouldn’t forget this: GitHub - CentOS/Calendar: The CentOS Project Calendar

That’s very simple but functional. We could… use pull-request CI to avoid conflicts?

This is some form of Wordpress plugin…


Oh yeah, the Discourse plugin it does have repeating events. I tested it here: This is a test of the calendar feature, for my own amusement and we talked about this same stuff already.

… but really have no memory of that. Coulda been another Matthew Miller :slight_smile:

I’d reiterate this Considering a general reorganization of this site! - #34 by t0xic0der here. Fedocal has been at a peripheral scope of the team, owing the fact that we’re undernumbered and the ones that we have are caught up in rewriting/maintaining other applications/sites such as Mote, Easyfix and sites.

We like to think the Fedocal is just the kind of application that deserves attention, both in terms of its look/feel as well as its functionality - and I wish that we were in a state to give it. Although of course, we can start with planning the end goals, technical checkpoints and a functional requirement analysis right now by forming an interest group.

Mind you, the interest group can be from any part of the community and they need not know about the technical specificities of the current codebase. As long as they have used the project for a considerable amount of time and feel that it has a scope to become better, they are more than welcome. The outcome of those discussions would help us pave the way on which the team would walk, a couple of release cycles down the line, for revamping Fedocal.

I understand that this time estimate does not look very good. Only if we had some more contributors interested in the technical side, I could have promised it sooner but maybe that can be something that the said interest group can add towards. Just imagine, with the discussions - there might be people stating their interest to actually work on the project hands-on. Wouldn’t that be wonderful?

1 Like

Hmm… Looks interesting and something that we can pull off in a (comparatively) shorter amount of time.

What do you think we can bind this plugin with?

The current plugin definitely has potential, but it needs quite a bit of development work to get to the level we’d need to replace Fedocal.

Use cases

There are three important use cases I can see for Fedocal. If there are more, please let me know and I’ll add them to consideration.

  1. Scheduling meetings. This is by far the most important.
  2. Letting people share their availability. Currently we mainly request this for vacations, and few people actually do it. (I, personally, find it just too cumbersome when I do remember.)
  3. Showing Fedora events like Flock to Fedora, Week of Diversity, or Release Parties. We don’t actually do this today.

Other possibilities

  • We tried to use it for the Flock conference schedule in 2013, but haven’t done that since. It’d be nice if we had a solution which made that appealing and easy.
  • Showing the Fedora release schedule itself. Currently, I think we only use this to schedule the go/no-go meetings, not actually the schedule. If we would do this, it needs to come automatically from rather than needing manual entry.

Shortcomings of current Discourse Calendar plugin

The “events” system being added to it is currently wrong for what we need. (It collects “events” from posts across the whole site and puts them on one single global calendar. We need way more than that.

My first assumption is that we’d focus on extending the “traditional” part of the calendar plugin, which has a calendar in the first reply to a topic which is “fed” by replies to that topic alone. However, it could be possible that the other approach — grabbing events across the site — would be better. In that case, though, we’d need to extend it to be able to have multiple calendars to target. (And in that case it’d be nice to be able to embed them in pinned topics, not just be hidden in the hamburger menu.)

So, that said, here’s some things we’d need:

In general

  1. The calendar display itself is pretty rudimentary.
    • It could be a lot prettier
    • Beyond pretty, it’s not very responsive to display — I don’t think it has a flexible size or anything.
      • it’s probably awful for accessibility
    • It is hard-coded to EU-style Monday-Sunday weeks
    • It seems to always show days in UTC, even though the entries are in local timezones, making it so day-long events in a local timezone can look like they span two days on the calendar. (The Discourse team is aware of this bug.)
    • The month-view currently only shows the first few characters of an event’s description. That’s fine if the calendar is just about one simple thing (see in use here for Fedora Social Hour, but not good for a calendar with a lot of different things.
    • Currently, the “Holiday” version of the calendar can assign colors to events, but it does so using a value programatically derived from the username. This should instead be configurable on a per-event basis, and apply to all calendars not just the holiday one.
  2. I don’t think there’s an .ical feed? That’d be nice for people to be able to add to their Google Calendar or whatever.
  3. Nice to have: a personal calendar view where you opt in to exactly what entries to track.

Meetings use case

  1. Fedocal has two primary “axes” — the group that the calendar entry belongs to (like “council”) and the location (like “#fedora-meeting”). The calendar plugin can do one or the other: we can make a “Fedora Council Meetings” topic or a “Fedora Meeting Channel” topic, but entries wouldn’t be linked. I’m not really sure what the best design for that as a plugin would look like — I think we could use some UX designer expertise in thinking about that.
    • it would be just fine if the “group” axis is Discourse groups, especially because we’re SOMEDAY SOON I HOPE going to get Discourse groups linked to our SSO.
    • or, possibly, the calendar “group” axis could be a tag. That might be more flexible, and would work for us because we’re planning on a group-to-tag mapping for our site organization.
  2. Critical: The system needs to prevent – or at least warn on – conflicts on both axis. That is, there can’t be two council-group meetings at the same time, and there can’t be two meetings from a different group in the same location at the same time.
  3. The syntax for repeating events is kind of weird, but okay. However, repeating events just show up in the calendar grid as repeating (and in the reminder as updated to the next one), not anything more. And there should be more:
    • Critical: It should be possible for users subscribe to a notification for each repeating event, on a per calendar-entry basis.
      • Nice to have: a per-Discourse-group configuration for the default notifications for a particular calendar, so e.g. members of the council group default to getting notifications for council calendar entries.
      • Nice to have: ability to also configure 15-minute warning notifications for upcoming meetings
    • Important: It should be possible to mark specific event as to be skipped (or to be held at a different time) without changing the whole thing
  4. Right now, event duration is done with entries like [date=2021-11-28 time=12:00:00 timezone="America/New_York"] → [date=2021-11-28 time=13:00:00 timezone="America/New_York"]. That’s tedious to enter and the result (2021-11-28T17:00:00Z2021-11-28T18:00:00Z) not immediately obvious. It’d be nice to have [date=2021-11-28 time=12:00:00 timezone="America/New_York" duration="1 hour"] instead.
    1. Nice to have: Entries without duration should be visually different — and perhaps only allowed for “whole day” entries.
  5. Nice to have: each calendar entry (separately for repeating ones) could have a link to an agenda + notes topic. This topic would not be automatically created without interaction, but should be easy to start with one click, and once created, linked automatically.

“Holidays” use case

  1. The holiday calendar should also be group aware. Right now it has some special-casing for (Discourse site) Staff — that should be generalized and configurable, and different calendars allowed for different groups as well as a global one.
  2. In its default config, the holiday calendar shows standard national holidays for every person who has their locale configured. If that’s more than, like, five people in no more than two different locations, it overwhelms all else. Discourse has provided us with a temporary hack to hide that, though.
  3. Nice to have: Right now staff members get a :palm_tree: emoji next to their username when they’re on vacation, only visible to other staff members. The visibility of this icon should be configurable.
  4. Nice to have: allow configuration of which emoji is shown.
    • Bonus nice to have: allow users to select from a list of emojis and reasons for a given unavailable time (vacation, sick, travel, etc.)

Fedora Events

Actually, I think what we have today could work for this. However, some of the above — prettier and more flexible calendar display, notifications, colors — would be useful.

For other possibilities

  • Conference schedule use case is just the meeting schedule use case, but very intensely so. Manually keeping track of conflicts becomes impossible. For this, may need user-level axis instead of group-level axis. (Speakers can’t be in two places at once.)
  • Release schedule calendar: I think this is mostly a matter of automation in importing from the existing schedule data. Existing calendar plugin could mostly work, I think. Again as with Fedora Events, color coding would be nice.

Fedora Note

CPE has a test discourse instance set up which could be used in the development process, by the way.

1 Like

Another thing Fedocal is being used for now (though in a poorly documented way) is to host the vacation calendar, where people can mark if they are going to be away.

A replacement system that can support this better (eg ideally you can follow individual people you work with, for instance fellow WG or SIG members and main admins of packages you comaintain, and also don’t give you a freeform calendar entry) would be nice.

We should probably also plug it into tools like fedora-active-user and Bugzilla.

That’s on list above already :slight_smile:
— although following individuals is something I hadn’t thought of.

1 Like

Ah yes. That applies to Discourse’s calendar though, right, not Fedocal

A custom app for, say, “status” that let you set your vacation days and who to follow would be nice. “Comaintainers” and “SIG members” could potentially be added as presets

Right — I’m thinking from the perspective of “what would the Discourse calendar plugin need to look like in order for it to fill the purpose”. The same would apply to any custom app.

Another thing we have used fedocal for (but have been lax in doing of late) is listing fedora infrastructure planned/announced outages.

1 Like

I think “lax of late” is really a symptom of the current system being more steps to use and more work to maintain than would be ideal. Same with the holiday calendar, or using fedocal for events.

This use is kind of somewhere between the Events use case and the Holiday one, I guess. Can you think of special situations this case would need that might not be covered by the points above, or other features it might benefit from?

Fedocal also has an API as well

The only thing off the top of my head that uses it is zodbot – (#nextmeeting and #nextmeetings) which to be honest is my only interaction with fedocal these days :slight_smile:

Also, i am a bit wary of using and extending an extension to do a task where that task is not really the main goal of the software (i.e. discourse)

Are there other options for calendar software out there that could be considered rather than a discourse plugin? Would something like nextcloud calendar be an option?


Ooh, yes, good point. Discourse has an API, and plugins can extend that — but it’s not centered around calendaring, so it’s not necessarily pretty. For example to pull events out of the test holiday calendar I set up:

curl -s |jq '.post_stream.posts[0].calendar_details[] | select(.type=="standalone")'

which gives you

  "type": "standalone",
  "post_number": 3,
  "message": "",
  "from": "2021-11-25T05:00:00.000Z",
  "to": "2021-11-29T05:00:00.000Z",
  "username": "mattdm",
  "recurring": null,
  "post_url": "/t/-/34553/3"
  "type": "standalone",
  "post_number": 9,
  "message": "",
  "from": "2021-12-07T23:00:00.000Z",
  "to": null,
  "username": "alciregi",
  "recurring": null,
  "post_url": "/t/-/34553/9"

And you can add entries with the normal entry to post replies.

Nextcloud is a pretty gigantic service. Are we using it for anything already?

I get the wariness, but an approach like this also comes with advantages — a whole bunch of infrastructure — user accounts, tags, groups (with the current SSO caveat around that), and things like the built-in timezone converter UI — click on 2021-11-19T01:24:00Z for an example. And, of course, automatic integration with at least one other service we’re already using. :slight_smile: