174 lines
6.9 KiB
Plaintext
174 lines
6.9 KiB
Plaintext
|
===============================
|
||
|
LIVEJOURNAL'S TIME PROBLEM
|
||
|
===============================
|
||
|
|
||
|
Brad Fitzpatrick
|
||
|
brad@livejournal.com
|
||
|
August 10, 2000
|
||
|
|
||
|
+------+
|
||
|
| Goal |
|
||
|
+------+
|
||
|
|
||
|
LiveJournal.com needs to handle time better, in particular to be aware of time
|
||
|
zones. There are too many problems that arise by neglecting them. If I knew of
|
||
|
an easy solution, I'd have implemented it already. This document is a plea for
|
||
|
help. All suggestions (however seemingly stupid) are likely to help, if only to
|
||
|
spark ideas for others.
|
||
|
|
||
|
Confession: I know very little about the details of time zones, daylight
|
||
|
saving's time, etc... but I've read tons on the topic, enough to know there's
|
||
|
a lot to know. In other words, the solution is likely complex as well.
|
||
|
|
||
|
+---------------+
|
||
|
| Current Setup |
|
||
|
+---------------+
|
||
|
|
||
|
LiveJournal's servers, and the primary developers are all on the west coast of
|
||
|
the United States, in the PST/PDT (Pacific Standard/Daylight Time) timezone,
|
||
|
which is -0800 GMT (and sometimes -0700 GMT, in daylight savings time, I
|
||
|
believe). Here is how LiveJournal currently stores the dates/time for different
|
||
|
events:
|
||
|
|
||
|
* journal creation date, update date --- PST/PDT local time.
|
||
|
|
||
|
* comment post dates --- PST/PDT local time.
|
||
|
|
||
|
* journal entries:
|
||
|
|
||
|
1) the "eventtime" is stored, whatever time you say it is wherever you're
|
||
|
at. you specify the year, month, day, hour and minute. no time zone
|
||
|
is recorded.
|
||
|
|
||
|
2) the "logtime" ... the time LiveJournal logs it to the database, in
|
||
|
PST/PDT local time.
|
||
|
|
||
|
+-------------------------+
|
||
|
| Description of problems |
|
||
|
+-------------------------+
|
||
|
|
||
|
Outlined below are the problems that LiveJournal currently faces:
|
||
|
|
||
|
1. Friends view ordering
|
||
|
2. Incorrect user clocks
|
||
|
3. Offline journaling/queueing
|
||
|
4. Comments post times
|
||
|
|
||
|
1. Friends view ordering
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
The friends view is currently sorted according to the "logtime". In other
|
||
|
words, regardless of what time you said the journal event happened, the server
|
||
|
will sort them in the reverse order they were received. This has the advantages
|
||
|
that if you have friends scattered all over different timezones the journal
|
||
|
entries will still show in the order they actually happened.
|
||
|
|
||
|
The problem occurs though near midnight ... you can have friends in one
|
||
|
timezone posting entries on one day interleaved with friends in another
|
||
|
timezone posting commments on the previous day. The resultant friends view
|
||
|
looks really messed up, going back and forth between days.
|
||
|
|
||
|
This leads me to topic 2 ...
|
||
|
|
||
|
2. Incorrect user clocks
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
The friends view shows the time the user reported (the "eventtime"), even
|
||
|
though it's sorted by the "logtime". So if a friend in your same timezone
|
||
|
is posting comments near the same time as you, it's possible their post
|
||
|
that happened after you has an earlier displayed time, because their computer
|
||
|
clock is messed up.
|
||
|
|
||
|
The worst is when their computer clock is months/years behind/ahead (very very
|
||
|
common because Windows users like to double-click their clock and use it as
|
||
|
a calendar ... then hit "OK" instead of "Cancel"). Then, the users complain
|
||
|
that "my journal entries are showing up on my friends page, but not on my
|
||
|
recent events view". This is because the recent events view (and the day
|
||
|
view, and the calendar) are all sorted by the "eventtime", the time the user
|
||
|
said the event happened.
|
||
|
|
||
|
3. Offline journaling/queueing
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
Many people have been asking for and patiently awaiting the "offline journaling"
|
||
|
feature ... being able to enter journal entries on your no-Internet laptop or
|
||
|
PDA and HotSync (or whatever) them later to LiveJournal's servers.
|
||
|
|
||
|
Now, how should the friends view be formatted? Say the user submits 10 journal
|
||
|
entries ranging over a two week vacation. Should all 10 show up at once on
|
||
|
all of that user's friends' friends views? Because under the current scheme,
|
||
|
the "logtime" of all those entries would be seconds apart, and that's what the
|
||
|
friends view uses to sort.
|
||
|
|
||
|
Should offline/queued entries not show up on friends lists? Should posts
|
||
|
with eventtimes more than 'n' days in the past not show up on friends lists?
|
||
|
|
||
|
Both those solutions suck, because they're both ugly hacks that avoid fixing the
|
||
|
real problem -- adding timezone support to livejournal.
|
||
|
|
||
|
4. Comment times
|
||
|
~~~~~~~~~~~~~~~~
|
||
|
Blah. You know the problem. Keep reading ... time for solutions:
|
||
|
|
||
|
+----------------+
|
||
|
| Ideal Solution |
|
||
|
+----------------+
|
||
|
|
||
|
Ideally what would happen is that LiveJournal would store all posts with a
|
||
|
GMT time (that doesn't have daylight savings time) and the friends views
|
||
|
would sort by the GMT time of the eventtime ... so the user that went on
|
||
|
vacation and is dumping 10 entries into the system has them all intermixed
|
||
|
with her friends' old entries. Then, the friends view should display both
|
||
|
the remote browsing users's time and the time it was when the user posted the
|
||
|
item.
|
||
|
|
||
|
So the problem turns into -- how do we convert the "eventtime" the user
|
||
|
submits into a GMT time? But ... let's assume the user's computer clock
|
||
|
is wrong, or we don't want to use it because it's not perfectly synchronized.
|
||
|
So then we need to pass along to LiveJournal a timezone field.
|
||
|
|
||
|
So the problem is:
|
||
|
|
||
|
--- I need a list of all timezones. What format are these in?
|
||
|
When does daylight savings time occur? Each country and states
|
||
|
within those countries have different rules.
|
||
|
|
||
|
--- given a timezone code, how do I convert it to GMT? Are there
|
||
|
good packages already in existence (preferrably in Perl) to
|
||
|
do these conversions? I've looked around a lot, but haven't
|
||
|
found anything perfect.
|
||
|
|
||
|
--- how do we deal with legacy clients? it'll be some time
|
||
|
before all clients start sending timezone info.
|
||
|
|
||
|
Once the database is storing the eventtime in GMT and the timezone
|
||
|
code as well, then the style system needs to be updated to allow style
|
||
|
authors to show times in both the poster's time, and the journal owner
|
||
|
or remote user's time.
|
||
|
|
||
|
But perhaps there's a better solution? I really don't know. I hate the
|
||
|
dependency on users' system clocks, and I hate the misordering of friends
|
||
|
items.
|
||
|
|
||
|
+----------------------+
|
||
|
| Good example problem |
|
||
|
+----------------------+
|
||
|
|
||
|
I have a journal I wrote from 1990 that I typed up, but I don't want
|
||
|
to post it, because it'll show up on all my friends' friends views. I'd
|
||
|
prefer it just went to my calendar, and I can make a single post to tell
|
||
|
my friends to go read it (and link to the day it starts).
|
||
|
|
||
|
Sure, I could add a meta-data flag or something new on the protocol that
|
||
|
says, "don't add this to my friends view" but then people will start using
|
||
|
that for other purposes, and start asking for stupid stuff like, "can I have
|
||
|
it not show up on certain people's friends view?", not understanding the
|
||
|
point of it. It's just not clean. :/
|
||
|
|
||
|
|
||
|
_____________________________________________________________________________
|
||
|
Feedback requested:
|
||
|
brad@livejournal.com
|
||
|
|
||
|
|