Table of Contents
Previous Chapter
Är du missnöjd med de klienter som finns till LysKOM? Gör som alla andra: skriv din egen! ceder visar dig hur.
LysKOM är ett konferenssystem, som utvecklats av Lysator. Om du inte redan vet vad LysKOM är rekommenderar jag att du plockar fram GARB augusti 1994 och läser om det, eller styr din favoritbrowser till http://www.lysator.liu.se/lyskom/ där det finns mer information.
Så. Nu vet du att LysKOM består av möten där personer kan skriva och läsa inlägg om allt mellan himmel och jord. (Och om du inte vet det så kan du ju göra som på lektionerna och låtsas att du förstår allt(1)).
I augusti 1993 skrev undertecknad och Inge Wallin en GARB-artikel om kom++, som är ett C++-klassbibliotek som hjälper till när man ska skriva en klient. Den utlovade efterföljaren, som skulle berätta om hur vi utökade det interpreterade inbyggbara språket TCL med kommandon som skulle underlätta skrivandet av LysKOM-klienter, blir nog aldrig skriven. Vi har nämligen hittat ett annat språk som är mycket skojigare och bättre på alla sätt och vis: Python. Det kan du läsa mer om på http://www.python.org/. # Demoprogram till GARB, augusti 1996 # # Programmet kopplar upp sig mot kom.lysator.liu.se, frågar efter personnummer och # lösenord, och skriver sedan ut ärende och textnummer på alla olästa texter # personen har. # # Detta program är skrivet av Per Cederqvist. # # Detta program är, till skillnad mot resten av kom++, Public Domain. # Importera lite användbara moduler. import komxx import os import sys import string # Skapa en ny session. s=komxx.new_session('kom.lysator.liu.se', '4894', 'GARB', 'Aug 1996') # Fråga efter LysKOM-nummer och lösenord. Det finns bättre och stabilare sätt att # göra det här på, men det får en annan artikel ta upp... pno = string.atoi(raw_input("Vad har du för nummer? ")) os.system("stty -echo") password = raw_input("Vad har du för lösen? ") os.system("stty echo") print # Försök logga in. if s.login(pno, password) != komxx.st_ok: print "Felaktigt nummer eller lösen" sys.exit(1) # Huvudloop: skriv ut ärenderaden för alla olästa texter som personen har. Märk # väl att detta program inte läsmarkerar texterna i servern, så du kan provköra # programmet utan att riskera att bli av med dina texter. while 1: # Fråga sessionen vilken nästa prompt bör bli. p = s.next_prompt() if p == komxx.NEXT_CONF: print print "Nästa möte:", print s.conf(s.goto_next_conf()).name() print elif p == komxx.NEXT_TEXT: print "Nästa text:", t=s.next_text(1) print t, s.text(t).subject() elif p == komxx.NEXT_COMMENT: print "Nästa komm:", t=s.next_text(1) print t, s.text(t).subject() elif p == komxx.NEXT_FOOTNOTE: print "Nästa fotn:", t=s.next_text(1) print t, s.text(t).subject() elif p == komxx.NO_MORE_TEXT: print "Det var allt." sys.exit(0) elif p == komxx.TIMEOUT_PROMPT: print "Stand by..." elif p == komxx.PROMPT_ERROR: print "Ett fel uppstod" sys.exit(2)
Sen november 1995 har vi skrivit på en Python-modul så att man kan använda kom++ från Python. Så här lätt kan man plocka fram en text med hjälp av den modulen:
$ /usr/local/kom++/bin/python Python 1.4b1 (Aug 14 1996) [GCC 2.7.2] Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam >>> import komxx >>> s=komxx.new_session( ... "localhost", "4894", ... "demo", "1.0") >>> s.login(6, "lösen") 'komxx.st_ok' >>> t=s.text(1) >>> t.subject() 'Official announcement' >>> t.body()[0:20] 'Hjärtligt välkommen ' >>> t.author() 6 >>> s.conf(t.author()).name() 'ceder' >>>
Modulen heter komxx
; för att man ska kunna komma åt den från Python måste man göra import komxx
. På nästa rad startas en ny session mot en LysKOM-server som kör på den lokala datorn. "demo"
är namnet på klienten, och "1.0"
är versionsnumret. Modulen skickar vidare de här uppgifterna till LysKOM-servern, som i sin tur gör dem tillgängliga för andra. Det här gör att det går lätt att se vilken klient som är populärast.
Innan man har loggat in kan man inte göra mycket annat än att få fram sitt LysKOM-nummer. Utrymmet i den här artikeln räcker inte till att visa hur det görs, men i kom++-paketet ingår filen py-clients/komdemo.py som ägnar ca 50 rader Python åt att läsa in namn och lösenord från tangentbordet, slå upp namnet, och logga in.
Jag vet att mitt LysKOM-nummer är 6, och loggar in genom att anropa metoden login
i det nyskapade sessionsobjektet. Inloggningen går bra, och jag fortsätter med att ta fram ett handle-objekt för text nummer 1.
Med t.subject()
kan man få fram ärenderaden, och på nästa rad skrivs de första 20 tecknen ur inlägget ut. Texten är skriven av person nummer 6, och med s.conf(t.author())
får vi fram ett handle-objekt för det mötet; s.conf(t.author()).name()
ger oss namnet.
I listning 1 finns ett lite intressantare program. Det är bara 40 rader långt (plus blankrader och kommentarer) men klarar ändå av att logga in och lista alla ärenderader -- i kommentarsordning! Jag hoppas programmet talar för sig självt.
Om du vill skriva din egen LysKOM-klient i Python så kan du antingen hämta källkoden till kom++ och kompilera (se ftp://ftp.lysator.liu.se/pub/lyskom/) eller använda den Python-interpretator som finns installerad i /usr/local/kom++/bin/python på Lysators Sun4:or. I /usr/local/kom++/README finns lite skissartad dokumentation på Python-modulen komxx. Listning 1 finns i /usr/local/kom++/garb.py.