diff --git a/doc/vad-aer-olaest.swe b/doc/vad-aer-olaest.swe new file mode 100644 index 0000000000000000000000000000000000000000..f569262568050985974e0456b28047570d18b26a --- /dev/null +++ b/doc/vad-aer-olaest.swe @@ -0,0 +1,145 @@ +This swedish text describes how the client knows which texts the user +has not yet read. It is extracted from the LysKOM-server that runs +at lysator.liu.se. +------------------------------------------------------------------- + + +102868 1991-09-07 20:40 /132 rader/ ceder (Per Cederqvist Lysator) +Kommentar till text 102846 av Jonas S Karlsson (@Link ping enl CSN) +Mottagare: LysKOM internals <1804> +Markerad av dig och 2 andra. +[rende: Hur man vet vad som {r ol{st. +------------------------------------------------------------ +Varje person har en lista |ver vilka m|ten han {r med i. F|r varje +m|te han {r med i lagras i en struct som vi kallar Membership: + + * m|tesnumret + * prioriteten p} m|tet + * n{r man senast l{ste en text i m|tet (markerade en text i + m|tet som l{st) + * vilka texter man har l{st (lokala m|tesnummer) + Just nu lagras det som + + Local_text_no last_text_read; + u_short no_of_read_texts; + Local_text_no *read_texts; + + vilket inneb{r att man har l{st alla texter fram till och + med last_text_read, och dessutom alla texter som finns i den + dynamiskt allokerade arrayen read_texts (som inneh}ller + no_of_read_texts texter). + +query_read_texts tar som argument en person och ett m|te (som +eventuellt kan vara en brevl}da) och returnerar den personens +Membership f|r just det m|tet. Till protokoll B kommer vi att d|pa om +funktionen till get_membership. + +> 102846 1991-09-07 17:05 /16 rader/ Jonas S Karlsson (@Link ping enl CSN) +> Mottagare: LysKOM internals <1801> +> [rende: Protokollet fr{ga... + +102846 {r ett globalt textnummer. Vi anv{nder typen Text_no f|r att +lagra och hantera s}dana nummer. 1801 {r ett lokalt nummer f|r m|tet +LysKOM internals. S}dana nummer lagras i en Local_text_no. (B}de +Text_no och Local_text_no {r 32 bittar just nu). + +F|r varje m|te finns en relation MAP : Local_text_no -> Text_no. Med +anropet get_map kan man h{mta en tabell med vars hj{lp man kan g|ra den +|vers{ttningen f|r ett visst m|te. + + +get_created_texts ger en lista som inneh}ller de texter som en viss +person har skrivit. + +F|r att ta reda p} vilka m|ten man har ol{sta inl{gg i g|r man s} h{r: + +1) get_unread_confs (ditt personnummer) + +Du f}r en lista med m|tesnummer. LysKOM garanterar att du inte har +n}got ol{st i n}got annat m|te, men det kan h{nda att den ger tillbaks +n}gra m|ten som du i verkligheten inte har n}got ol{st i. + +De m|ten man f}r tillbaks {r de d{r de existerar (eller har existerat) +en text med ett h|gre lokalt textnummer {n last_text_read i ditt +Membership i m|tet i fr}ga. + +2a) G|r query_read_texts f|r alla m|ten i listan du fick i steg 1. + +2b) Samtidigt h{mtar du m|tesstatusen f|r de m|tena (med +get_conf_stat). + +3) Samla ihop alla svaren och sortera dom s} att man f}r l{sa +inl{ggen i r{tt ordning. + +4) Ta det f|rsta m|tet. J{mf|r det h|gsta lokala numret som existerar +(det kan du f} fram ur m|tesstatusen) med last_text_read i ditt +Membership. Om det visar sig att det finns texter du inte har l{st +m}ste du g|ra ett get_map f|r att ta reda p} vilket globalt textnummer +de ol{sta texterna har. + +5) Sl} upp varje lokalt textnummer som du inte har l{st i mappen. Du +f}r ett Text_no. Om du f}r en nolla inneb{r det att den text som hade +det numret har raderats eller subtraherats fr}n m|tet. Ignorera det +lokala numret och tag n{sta. + +6) N{r du f}r ett textnummer som inte {r noll h{mtar du textstatusen +och textmassan (sj{lva texten) med get_text_stat och get_text, och +visar den p} sk{rmen. N{r anv{ndaren har l{st klart texten talar du om +det f|r servern med mark_as_read (som tar ett m|tesnummer och ett +Local_text_no som argument och uppdaterar ditt Membership f|r det +m|tet). Om texten har flera mottagare som du {r medlem i ska du anropa +mark_as_read en g}ng f|r varje mottagare. + +Repetera steg 5 och 6 tills du har l{st ut m|tet. Se till att du +f|ljer kommentartr{det, om anv{ndaren vill det. + +Repetera steg 4 tills allt {r utl{st. + +Visa alla markerade. + +Se tiden. +================================================================= + +S} g}r det till, grovt sett. Saker och ting kompliceras av att det +hela tiden skrivs nya texter. Servern skickar ut ett asynkront +meddelande n{r en ny text skapas (i ett m|te som man {r medlem i). I +meddelandet finns hela textstatusen (s} att man slipper h{mta den). + +En annan grej som g|r det hela komplicerat {r att man g{rna vill att +klienten ska h{mta saker i f|rv{g n{r man inte har n}got annat att +g|ra. Man vill att klienten inte ska h{mta samma information mer {n en +g}ng. Man vill f} upp den f|rsta texten s} snabbt som m|jligt. Man +vill kunna g|ra Lista Nyheter s} snabbt som m|jligt. Det finns m}nga +saker man kan optimera p} olika s{tt. + +Elispklienten g|r inte riktigt som jag har beskrivit det p} alla +st{llen, men resultatet blir i princip det samma. En del av anropen +(t ex get_unread_confs) har vi inf|rt i efterhand f|r att vi m{rkte +att det var n|dv{ndigt f|r att f} saker och ting att g} n}gorlunda +snabbt. + +Vi har medvetet valt att g|ra s} mycket jobb som m|jligt i klienten, +och s} lite jobb som m|jligt i servern. Nu, n{r det blev s} att +klienten {r skriven i elisp, s} skulle vi nog ha f}tt ett snabbare +system (s{rskilt uppstarten) om servern varit mer intelligent och valt +i vilken ordning texter ska visas. Systemet {r designat med m}let att +det inte ska bli l}ngsammare {ven om m}nga klienter kopplar upp sig +samtidigt, och det m}let har vi nog n}tt. (Att det kan g} l}ngsamt n{r +5-6 personer k|r sin elispklient p} lysator.liu.se beror inte p} +svarstiderna fr}n LysKOM-servern, utan p} att emacsarna blir +l}ngsamma. De som k|r fr}n en obelastad maskin samtidigt m{rker inte +att det g}r l}ngsamt (skryt, skryt:-)). (Nej, det finns inga m{tningar +som bekr{ftar det h{r - men jag t{nker m{ta lite responstider senare i +h|st). + +Med en smart klient skriven i c kommer LysKOM att bli snabbt. Om +c-klienterna k|rs p} varsin maskin (var och en har sin egen +arbetsstation) tror jag att systemet kommer att klara "tillr{ckligt" +m}nga anv{ndare. (LysKOM {r ju ett lokalt media. Om hela v{rlden k|rde +p} samma LysKOM-server i st{llet f|r att skriva news skulle det bli +olidligt att l{sa LysKOM {ven om man bortser fr}n responstider...) + +P}peka g{rna eventuella oklarheter i den h{r texten. Jag t{nker skicka +med den bland dokumentationen vi har i serverreleasen som vi snart +g|r, s} jag vill att texten ska vara begriplig... +(102868) ----------------------------------- diff --git a/doc/what-is-unread.swe b/doc/what-is-unread.swe new file mode 100644 index 0000000000000000000000000000000000000000..f569262568050985974e0456b28047570d18b26a --- /dev/null +++ b/doc/what-is-unread.swe @@ -0,0 +1,145 @@ +This swedish text describes how the client knows which texts the user +has not yet read. It is extracted from the LysKOM-server that runs +at lysator.liu.se. +------------------------------------------------------------------- + + +102868 1991-09-07 20:40 /132 rader/ ceder (Per Cederqvist Lysator) +Kommentar till text 102846 av Jonas S Karlsson (@Link ping enl CSN) +Mottagare: LysKOM internals <1804> +Markerad av dig och 2 andra. +[rende: Hur man vet vad som {r ol{st. +------------------------------------------------------------ +Varje person har en lista |ver vilka m|ten han {r med i. F|r varje +m|te han {r med i lagras i en struct som vi kallar Membership: + + * m|tesnumret + * prioriteten p} m|tet + * n{r man senast l{ste en text i m|tet (markerade en text i + m|tet som l{st) + * vilka texter man har l{st (lokala m|tesnummer) + Just nu lagras det som + + Local_text_no last_text_read; + u_short no_of_read_texts; + Local_text_no *read_texts; + + vilket inneb{r att man har l{st alla texter fram till och + med last_text_read, och dessutom alla texter som finns i den + dynamiskt allokerade arrayen read_texts (som inneh}ller + no_of_read_texts texter). + +query_read_texts tar som argument en person och ett m|te (som +eventuellt kan vara en brevl}da) och returnerar den personens +Membership f|r just det m|tet. Till protokoll B kommer vi att d|pa om +funktionen till get_membership. + +> 102846 1991-09-07 17:05 /16 rader/ Jonas S Karlsson (@Link ping enl CSN) +> Mottagare: LysKOM internals <1801> +> [rende: Protokollet fr{ga... + +102846 {r ett globalt textnummer. Vi anv{nder typen Text_no f|r att +lagra och hantera s}dana nummer. 1801 {r ett lokalt nummer f|r m|tet +LysKOM internals. S}dana nummer lagras i en Local_text_no. (B}de +Text_no och Local_text_no {r 32 bittar just nu). + +F|r varje m|te finns en relation MAP : Local_text_no -> Text_no. Med +anropet get_map kan man h{mta en tabell med vars hj{lp man kan g|ra den +|vers{ttningen f|r ett visst m|te. + + +get_created_texts ger en lista som inneh}ller de texter som en viss +person har skrivit. + +F|r att ta reda p} vilka m|ten man har ol{sta inl{gg i g|r man s} h{r: + +1) get_unread_confs (ditt personnummer) + +Du f}r en lista med m|tesnummer. LysKOM garanterar att du inte har +n}got ol{st i n}got annat m|te, men det kan h{nda att den ger tillbaks +n}gra m|ten som du i verkligheten inte har n}got ol{st i. + +De m|ten man f}r tillbaks {r de d{r de existerar (eller har existerat) +en text med ett h|gre lokalt textnummer {n last_text_read i ditt +Membership i m|tet i fr}ga. + +2a) G|r query_read_texts f|r alla m|ten i listan du fick i steg 1. + +2b) Samtidigt h{mtar du m|tesstatusen f|r de m|tena (med +get_conf_stat). + +3) Samla ihop alla svaren och sortera dom s} att man f}r l{sa +inl{ggen i r{tt ordning. + +4) Ta det f|rsta m|tet. J{mf|r det h|gsta lokala numret som existerar +(det kan du f} fram ur m|tesstatusen) med last_text_read i ditt +Membership. Om det visar sig att det finns texter du inte har l{st +m}ste du g|ra ett get_map f|r att ta reda p} vilket globalt textnummer +de ol{sta texterna har. + +5) Sl} upp varje lokalt textnummer som du inte har l{st i mappen. Du +f}r ett Text_no. Om du f}r en nolla inneb{r det att den text som hade +det numret har raderats eller subtraherats fr}n m|tet. Ignorera det +lokala numret och tag n{sta. + +6) N{r du f}r ett textnummer som inte {r noll h{mtar du textstatusen +och textmassan (sj{lva texten) med get_text_stat och get_text, och +visar den p} sk{rmen. N{r anv{ndaren har l{st klart texten talar du om +det f|r servern med mark_as_read (som tar ett m|tesnummer och ett +Local_text_no som argument och uppdaterar ditt Membership f|r det +m|tet). Om texten har flera mottagare som du {r medlem i ska du anropa +mark_as_read en g}ng f|r varje mottagare. + +Repetera steg 5 och 6 tills du har l{st ut m|tet. Se till att du +f|ljer kommentartr{det, om anv{ndaren vill det. + +Repetera steg 4 tills allt {r utl{st. + +Visa alla markerade. + +Se tiden. +================================================================= + +S} g}r det till, grovt sett. Saker och ting kompliceras av att det +hela tiden skrivs nya texter. Servern skickar ut ett asynkront +meddelande n{r en ny text skapas (i ett m|te som man {r medlem i). I +meddelandet finns hela textstatusen (s} att man slipper h{mta den). + +En annan grej som g|r det hela komplicerat {r att man g{rna vill att +klienten ska h{mta saker i f|rv{g n{r man inte har n}got annat att +g|ra. Man vill att klienten inte ska h{mta samma information mer {n en +g}ng. Man vill f} upp den f|rsta texten s} snabbt som m|jligt. Man +vill kunna g|ra Lista Nyheter s} snabbt som m|jligt. Det finns m}nga +saker man kan optimera p} olika s{tt. + +Elispklienten g|r inte riktigt som jag har beskrivit det p} alla +st{llen, men resultatet blir i princip det samma. En del av anropen +(t ex get_unread_confs) har vi inf|rt i efterhand f|r att vi m{rkte +att det var n|dv{ndigt f|r att f} saker och ting att g} n}gorlunda +snabbt. + +Vi har medvetet valt att g|ra s} mycket jobb som m|jligt i klienten, +och s} lite jobb som m|jligt i servern. Nu, n{r det blev s} att +klienten {r skriven i elisp, s} skulle vi nog ha f}tt ett snabbare +system (s{rskilt uppstarten) om servern varit mer intelligent och valt +i vilken ordning texter ska visas. Systemet {r designat med m}let att +det inte ska bli l}ngsammare {ven om m}nga klienter kopplar upp sig +samtidigt, och det m}let har vi nog n}tt. (Att det kan g} l}ngsamt n{r +5-6 personer k|r sin elispklient p} lysator.liu.se beror inte p} +svarstiderna fr}n LysKOM-servern, utan p} att emacsarna blir +l}ngsamma. De som k|r fr}n en obelastad maskin samtidigt m{rker inte +att det g}r l}ngsamt (skryt, skryt:-)). (Nej, det finns inga m{tningar +som bekr{ftar det h{r - men jag t{nker m{ta lite responstider senare i +h|st). + +Med en smart klient skriven i c kommer LysKOM att bli snabbt. Om +c-klienterna k|rs p} varsin maskin (var och en har sin egen +arbetsstation) tror jag att systemet kommer att klara "tillr{ckligt" +m}nga anv{ndare. (LysKOM {r ju ett lokalt media. Om hela v{rlden k|rde +p} samma LysKOM-server i st{llet f|r att skriva news skulle det bli +olidligt att l{sa LysKOM {ven om man bortser fr}n responstider...) + +P}peka g{rna eventuella oklarheter i den h{r texten. Jag t{nker skicka +med den bland dokumentationen vi har i serverreleasen som vi snart +g|r, s} jag vill att texten ska vara begriplig... +(102868) -----------------------------------