# Ofta ställda frågor för LysKOM emacslispklienten.

Version 2.0.

Författare: Linus Tolke

Inspirationskälla: Lyskom, Lyskom frågor (&) svar; Elispklienten. Detta möte heter från 31 juni 1992: Lyskom frågor (och) svar.

Uppläggningen är, först en lista över olika områden som behandlas i denna faq. Sedan en lista över alla frågor numrerade från a1 till ö1 och därefter samma frågor igen fast med svar.

## Lista över områden:

- Allmänna frågor
- Konfigurering
- Vid editering
- Möten
- Frågor om inlägg
- Lappar på dörrar
- Markering
- Personer
- Sessionen
- Systemet
- Maskinspecifika saker
- Vad händer med LysKOM i framtiden
- Historia

## Frågor sammanställning:

### Allmänna frågor:

- a1: Vad är LysKOM?
- a2: Vad är elispklienten?
- a3: Var finns den att hitta?
- a4: Vad finns det för typ av dokumentation?
- a5: Var hittar jag protokoll-specen för lyskomprotokollet.
- a6: Vem är Guran?

### Konfigurering:

- c1: Varför står det att vissa Läser, Väntar, Återser?
- c2: Varför står det att vissa Ögnar igenom inläggen, Rättar tentor, Äter pizza, Hade glömt vad som skrivits tidigare?
- c3: Hur ändrar man sin kom-mercial?
- c4: Hur ändrar man de andra meddelandena?

- d1: Kan jag få saker att hända automatiskt när jag startar lyskom?
- d2: Kan jag få saker att hända automatiskt när jag loggat in?
- d3: Hur kan jag sätta vilka default-promptar jag skall få när jag har läst ut allt.
- d4: Hur gör man för att ändra variabler i lyskom?

### Vid editering:

- e1: Kan jag få saker att hända automatiskt när jag börjar skriva en kommentar?
- e2: Hur gör jag för att binda speciella tangenter för att skriva en kommentar?
- e3: Jag får upp en tom buffert och ett pip när jag skall till att editera. Vad har jag gjort för fel?
- e4: Hur gör jag för att behålla lyskom-bufferten på skärmen medan jag skriver en kommentar, ett inlägg eller ett brev?

- f1: Hur anger man För kännedomsmottagare?
- f2: Hur flyttar man inlägg?

### Möten:

- g1: Hur gör man för att ändra typen på ett möte?
- g2: Hur ändrar man hur många dagar artiklar i ett visst möte sparas?

### Frågor om inlägg:

- i1: Varför stämmer inte antalet olästa inlägg när jag gör status person som när jag gör lista nyheter?
- i2: Varför är antalet olästa i vissa möten negativt när man gör status?
- i3: Hur gör man för att hoppa över ett helt kommentarsträd?
- i4: Hur länge sparas inlägg som inte har några mottagare.

### Lappar på dörrar:

- l1: Varför får jag Du har en lapp på dörren, det finns ingen sådan text när jag loggar in?

### Markering:

- m1: Vad innebär markering?
- m2: Kan man markera inlägg på olika sätt?
- m3: Hur gör jag för att markera inlägg på ett annat sätt?
- m4: Hur gör jag för att återse inlägg markerade på ett visst sätt?
- m5: Vilken markering använder sig elispklienten normalt av?

### Personer:

- p1: Varför finns det två statuskommandon: Status möte och status person?

### Sessionen:

- s1: Kan jag återstarta sessionen efter det att jag gått ur lyskom?
- s2: Varför tar det så lång tid att logga in?
- s3: Varför tar det så lång tid att göra endast?
- s4: Varför sorterar elisp-klienten om mötena i samma ordning som när jag går in i lyskom varje gång jag gör endast?

### Systemet:

- t1: Hur och till vem skickar jag buggrapporter?
- t2: Varför sparas databasen så ofta?

### Maskinspecifika saker:

- u1: Varför kan jag inte köra elisplienten på en dec-station.

### Vad händer med LysKOM i framtiden:

- v1: Protokoll B, vad är det?
- v2: Vad kommer att ingå i protokoll B?

### Historia:

- ö1: Varför skrevs elisp-klienten?

## Frågor och svar:

### Allmänna frågor:

a1: Vad är LysKOM?
  LysKOM är ett konferenssystem som är inspirerat av KOM, det konferenssystem som skapades av QZ i Stockholm. Orsaken till att LysKOM skrevs var att det KOMsystem Lysators medlemmar hade tillgång till lades ner. QZ-KOM gick att köra på DEC-10 och DEC-20-maskiner och den sista DEC-20-maskinen på LiTH som studenterna hade tillgång till såldes och försvann. KOM hade blivit vanebildande för en del och det bedömdes att en ersättning var nödvändig.
a2: Vad är elispklienten?
  Elispklienten är den första fungerande klienten till lyskom, det är dessutom den för tillfället mest kompletta. Den är skriven helt i elisp och kör under gnu-emacs (testad minst i versionerna 18.51, 18.55, 18.57 och 18.58, epoch 4.0, lucid-emacs 19.1 och 19.2).
a3: Var finns den att hitta?
  Elispklienten kan du hämta med anonym ftp från lysator: host: ftp.lysator.liu.se dir: /pub/lyskom/elisp-client/ filnamn: lyskom-0.34.6.el.Z (vanliga klienten) filnamn: lyskom-0.34.6.elc.Z (byte-kompilerad version av klienten) filnamn: englist-lyskom-0.34.6.elc.Z
a4: Vad finns det för typ av dokumentation?
  Dokumentation finns på latexinfo format. Eftersom jag inte fått den igenom latex så har jag inte lagt upp den för anonym ftp. Däremot har den gått igenom info-genereringsprogrammet och du kan alltså hämta den antingen som info-fil: elisp-client-0.34.6.info eller som ren textfil elisp-client-0.34.6.txt från samma dir som du hämtar klienten.
a5: Var hittar jag protokoll-specen för lyskomprotokollet.
  Protokollspecen kan du hämta med anonym ftp från lysator: host: ftp.lysator.liu.se dir: /pub/lyskom/ filnamn: prot-A.txt
a6: Vem är Guran?
  Fantomens vän, bandarernas hövding.

### Konfigurering:

(Om du inte förstår beskrivningarna av hur du skall göra olika saker så skall du inte göra dem.)

c1: Varför står det att vissa Läser, Väntar, Återser?
  Specifikationen för LysKOM säger att klienten kan tala om för servern vad den tror att användaren gör. Detta kan vara en godtycklig text.

  Elispklienten har valt att tala om att användaren Läser när hon läser, Väntar när hon väntar och Återser när hon återser mm.

  Elispklienten har dessutom valt att hela tiden skriva ut på message-raden vad personer i samma möte just nu sysslar med. (dvs när deras klienter skickar meddelanden.)

c2: Varför står det att vissa Ögnar igenom inläggen, Rättar tentor, Äter pizza, Hade glömt vad som skrivits tidigare?
  Eftersom det står klienten fritt att sända in vilket meddelande som helst har vi gjort så att meddelandet som talar om vad man gör när man läst ut alla möten är väldigt lätt att ändra. Det ligger i variabeln kom-mercial och det är en sträng.
c3: Hur ändrar man sin kom-mercial?
  M-x set-variable RET kom-mercial RET "Rättar tentor." RET
c4: Hur ändrar man de andra meddelandena?
  Det finns en assoc-lista i variabeln kom-tell-phrases som består av symboler och texter som klienten skickar till servern när kommandona med samma namn som symbolen utförs. Det är bara att ändra denna.

  Varning: Om du tar bort saker ur denna lista kan det bli problem om inte klienten hittar symbolen den söker efter.

d1: Kan jag få saker att hända automatiskt när jag startar lyskom?
  Ja, lyskomklienten skapar en emacsmode med de flesta vanliga defaulten. Bl.a. körs lyskom-mode-hook när man startar lyskom.
d2: Kan jag få saker att hända automatiskt när jag loggat in?
  Ja, läs dokumentationen för kom-do-when-starting.
d3: Hur kan jag sätta vilka default-promptar jag skall få när jag har läst ut allt.
  Default är att först få prompten Återse alla markerade - och sedan Se tiden.

  Läs dokumentationen för kom-do-when-done.

d4: Hur gör man för att ändra variabler i lyskom?
  Vissa variabler lagras i din user-area i LysKOM-servern. Det är de som finns listade i variabelerna lyskom-elisp-variables, lyskom-global-boolean-variables och lyskom-global-non-boolean-variables. Du kan ändra dessa och andra kom-variabler mha. kommandot Ändra variabler. När du ger kommandot Ändra variabler kommer en speciell buffert upp. Den fungerar precis som emacs *List Options* buffert förutom när du trycker C-c C-c. Då sparar den nämligen dina variabler i servern.

  Ändra aldrig på variablerna lyskom-global-*-variables! Om de är fel så är det en bugg i klienten.

### Vid editering:

e1: Kan jag få saker att hända automatiskt när jag börjar skriva en kommentar?
  Ja, editeringsmoden är en vanlig emacs-mode så tillvida att den kör lyskom-edit-mode-hook när man startar den.
e2: Hur gör jag för att binda speciella tangenter för att skriva en kommentar?
  Eftersom lyskom-edit-mode gör vissa speciella tangentbortsbindningar och har en hel del buffertlokala variabler kan man inte välja en helt ny mode i lyskom-edit-mode-hook (i princip alla moder rensar ju alla lokala variabler). Vill man att lyskom-edit-mode skall få andra grundinställningar som byggs på skall man sätta lyskom-edit-mode-mode-hook som körs innan de speciella bindningarna görs.
e3: Jag får upp en tom buffert och ett pip när jag skall till att editera. Vad har jag gjort för fel?
  Din lyskom-edit-mode-mode-hook har evaluerat ett lisp-uttryck som har misslyckats. Kolla vad den försöker göra och fixa så att den inte misslyckas.
e4: Hur gör jag för att behålla lyskom-bufferten på skärmen medan jag skriver en kommentar, ett inlägg eller ett brev?
  Du talar om för elisp-klienten att du vill att den skall använda det andra fönstret/skapa ett nytt fönster för att skriva i genom att sätta variabeln kom-write-texts-in-window till other.

  (setq kom-write-texts-in-window 'other) i din .emacs till exempel.

f1: Hur anger man För kännedomsmottagare?
  Det finns inte någon sådan möjlighet. Använd Mottagare eller Extra kopiemottagare:
f2: Hur flyttar man inlägg?
  Det finns ingen sådan möjlighet. Använd kommandona Addera mottagare eller Addera extra kopiemottagare resp. Subtrahera mottagare för vart och ett av inläggen du vill flytta. Om du vill skriva kommandona Flytta inlägg, eller flytta kommentarsträd så får du.

### Möten:

g1: Hur gör man för att ändra typen på ett möte?
  Det gör du inte med emacslispklienten.

  Det är klart att det går eftersom det här handlar om emacs men det finns inte förberett snygg hantering i emacslispklienten.

      ESC ESC (initiate-set-conf-type 'foo nil 87
                                      (lyskom-create-conf-type nil t nil nil)) RET

  'foo
    Den interna kön som kommer att hantera det här. Om du råkar välja någon av de köer som används av klienten så kommer det som klienten normalt gör mha den kön att få vänta under den bråkdelen av en sekund som det här anropet tar. Inga problem.
  nil
    Den funktion som kommer att anropas när operationen är klar. I en snygg implementationen hade man här sett till att cachen töms och att man skriver ut "Det gick bra" eller något till användaren.
  87
    Numret på mötet man vill ändra typen för. Det måste man ta reda på på annat sätt.
  typen
    Du kan få lite hjälp om vad de olika "bittarna" motsvarar i typen genom att titta på dokumentationssträngen till lyskom-create-conf-type.
g2: Hur ändrar man hur många dagar artiklar i ett visst möte sparas?
  Använd kommandot ändra livslängd.

### Frågor om inlägg:

i1: Varför stämmer inte antalet olästa inlägg när jag gör status person som när jag gör lista nyheter?
  Antalet olästa du får fram med lista nyheter är det antal som klienten känner till. (Alla dessa ligger som nummer i listor.)

  Antalet olästa när du gör status person beräknas ur en ganska simpel formel: Det sista skrivna inlägget i mötet - Det sista du läste i mötet. Har du gått med i ett möte efter det att inlägg plockats bort därifrån och sedan inte läst något där så har det sista du läste i mötet mycket lägre nummer än det sista skrivna inlägget i mötet.

i2: Varför är antalet olästa i vissa möten negativt när man gör status?
  Antalet olästa när du gör status person beräknas ur en ganska simpel formel: Det sista skrivna inlägget i mötet - Det sista du läste i mötet. Har du gått med i ett möte efter det att inlägg plockats bort därifrån och sedan inte läst något där så har det sista du läste i mötet mycket lägre nummer än det sista skrivna inlägget i mötet.

  Informationen om vilket som är det sista skrivna inlägget i ett visst möte ligger i klienten sparad hos mötet och uppdateras för varje inlägg som skrivs. Informationen om vilket det sista inlägg du läste ligger i klienten sparad hos personen och uppdateras bara om du ändrar namn.

i3: Hur gör man för att hoppa över ett helt kommentarsträd?
  Kommentarsträd läses normalt i djup-först ordning. (Du kan sätta om det här genom att sätta variablen kom-read-depth-first till nil.) Om du vill hoppa över ett helt träd måste du använda hoppa utgående från inlägget längst upp i trädet. Annars kan det fortfarande finnas kvar inlägg från trädet som du inte har läst/läsmarkerat.

      Återse urinlägget - ( å u eller å r )
      Hoppa - (h)

i4: Hur länge sparas inlägg som inte har några mottagare.
  24 timmar.

### Lappar på dörrar:

l1: Varför får jag Du har en lapp på dörren, det finns ingen sådan text när jag loggar in?
  Du har tagit bort lappen på fel sätt. Du skall använda kommandot "Ta bort lapp på dörren" för att ta bort en lapp. Det du måste göra för att fixa detta är att använda kommandot "Ta bort lapp på dörren" och ta bort den obefintliga lappen.

### Markering:

m1: Vad innebär markering?
  Markering är ett sätt för dig att spara inlägget. Markerade inlägg rensas inte bort av systemet.
m2: Kan man markera inlägg på olika sätt?
  Ja.
m3: Hur gör jag för att markera inlägg på ett annat sätt?
  Sätt variabeln kom-default-mark till nil så får du en fråga varje gång du markerar ett inlägg. Alternativen är heltalen 1-255.
m4: Hur gör jag för att återse inlägg markerade på ett visst sätt?
  Använd kommandot Återse markerade (åm) istället för Återse alla markerade (åam).
m5: Vilken markering använder sig elispklienten normalt av?
  100.

### Personer:

p1: Varför finns det två statuskommandon: Status möte och status person?
  Om du tittar noggrannare ser du att de ger helt olika information. Status möte för en person talar om när personen skapades, när någon sist skickade ett brev till denne medan Status person talar om hur mycket inlägg personen skrivit, hur länge han har varit inne i LysKOM.

### Sessionen:

s1: Kan jag återstarta sessionen efter det att jag gått ur lyskom?
  Nej.
s2: Varför tar det så lång tid att logga in?
  Lokalt på din maskin sparas ingen som helst information om vilka texter du läst eller vilka möten du är medlem i. Allt detta hämtas nytt varje gång du loggar in. Dessutom hämtas en lista på alla texter du har markerat (för att du skall kunna få fram texten Markerat av dig. eller Markerat av dig och 5 andra. när du läser).

  Det som tar längst tid är antabligen vilka möten du är medlem i och listan över olästa inlägg i dessa mötena.

s3: Varför tar det så lång tid att göra endast?
  Se nästa fråga.
s4: Varför sorterar elisp-klienten om mötena i samma ordning som när jag går in i lyskom varje gång jag gör endast?
  Endast är för tillfället lite korkat implementerat. Det finns nämligen ett anrop till servern som gör just endast. Detta använder sig klienten av och sedan gör den det som är lättast: Hämtar om all din information från början igen (som när du loggade in).

### Systemet:

t1: Hur och till vem skickar jag buggrapporter?
  Buggrapporter skickas till bug-lyskom@lysator.liu.se. Se till att få med all vital information, enklast genom att köra funktionen kom-compile-bug-report och skicka den bufferten.

  Ifall buggen är reproducerbar och du har tid så gör dessutom följande:

  - Gå till läget precis innan du gav kommandot som orsakade buggen.
  - Sätt variabeln: lyskom-debug-communications-to-buffer till t.
  - Sätt variabeln: debug-on-error till t.
  - Provocera fram buggen.
  - Kör kom-compile-bug-report. Det skall gå bra att göra i *Backtrace* bufferten ifall du fick en sådan.
  - Skicka in denna nya bufferten istället. Den kan innehålla lite mer information.
t2: Varför sparas databasen så ofta?
  Ursprungligen sparade servern allting på en gång. Den sade, jag sparar nu och sedan sparade den om hela databasen (vilket tog flera minuter). Detta skrev ceder om så att den istället sparar efter hand, dvs den kan ta emot anrop och svara på dem samtidigt som den sparar.

  Att du får ett "Nu sparar jag" meddelande är att den antingen börjar spara eller slutar spara. Det är då den gör de saker i samband med sparandet som den inte kan göra medan den svarar på andra anrop (markera vilken data som den i värsta fall måste ha 2 kopior av ända tills den har sparat klart, resp slänga den data den har haft 2 kopior av.) Själva sparandet kan sedan mycket väl ta mer än en kvart.

### Maskinspecifika saker:

u1: Varför kan jag inte köra elisplienten på en dec-station.
  Denna bugg är fixad i senare versioner av klienten (från och med 0.37).

  string-to-int fungerar inte på samma sätt. (Antagligen beroende på att atoi inte fungerar på samma sätt).

  Här är en patch som kan läggas i .emacs eller liknande:

      ;;;; fix to make string-to-int behave the same on DECstation as on sun
      (if (= 0 (string-to-int "\n17"))
          (progn
            (fset 'string-to-int-orig (symbol-function 'string-to-int))
            (defun string-to-int (string)
              "Convert STRING to an integer by parsing it as a decimal number.
      Skip leading spaces and newlines."
              (if (length string)
                  (let ((i 0)
                        (c (aref string 0)))
                    (while (or (= c ?\n) (= c ?\ ))
                      (setq i (1+ i))
      		(setq c (aref string i)))
                    (string-to-int-orig (substring string i)))
                0))))

### Vad händer med LysKOM i framtiden:

v1: Protokoll B, vad är det?
  LysKOM jobbar som sagt med server-klient modell. Protokollet är enkelt men innehåller en del speciella saker typ asynkrona anrop från båda hållen... Den ursprungliga specen gjordes snabbt eftersom vi snabbt ville få ett fungerande system. Tyvärr fick det en del brister och vi bestämde oss för att göra om allt från scratch. Detta omgjorda protokoll är protokoll B. Tyvärr så är det ursprungliga protokollet så pass bra att det går långsamt med utvecklingen.
v2: Vad kommer att ingå i protokoll B?
  * Textdelar (Lars Aronsson Lysator inlägg 58964):
  I Protokoll B mellan klient och server kommer varje INLÄGG att bestå av det vanliga HUVUDET och av en INLÄGGSKROPP. Den senare kommer att bestå av en följd av KROPPSDELAR. Varje kroppsdel har en datatyp och en dataarea. Typerna kan vara t.ex. ISO 8859-1 text, Sun SPARC ljudfil eller en grafisk bild. I Protokoll B blir det i de flesta fall fel att tala om "text", "textstatus", "textnummer" etc. Ordet "text" bör då ersättas med ordet "inlägg".

### Historia:

ö1: Varför skrevs elisp-klienten?
  Ur: En slö implementatörs bekännelser av ceder (Per Cederqvist)

  En gång i tidernas begynnelse (för lite drygt ett år sen) (Detta skrevs ursprungligen i november 1991) behövde jag testa LysKOM-servern. Jag hade kört rått med telnet direkt mot porten, men det blev jobbigt efter ett tag. Jag bestämde mig för att skriva ett litet elispprogram för att kunna testa servern.

  Mitt mål var från början att testa servern (och att programmera något annat än servern - det hade blivit många rader C-kod under våren och sommaren, och nästan alla hörde till servern). Jag skrev elispkoden med målet att få det att fungera hjälpligt så fort som möjligt, inte att göra den korrekt och komplett.

  ---

  När klienten väl fungerade var det alldeles för kul att skriva nya funktioner till den för att man skulle kunna låta bli så sedan dess har det bara blivit mer och mer och för tillfället är det den mest kompletta LysKOMklient som finns. Nackdelen: långsamhet kan lätt åtgärdas genom att köra på en snabbare maskin.