Perlklienten till LysKOM

Inititativtagare: Peter Grobgeld <dov@menora.weizmann.ac.il>

Underhållare: Peter Grobgeld <dov@menora.weizmann.ac.il>

Senast släppta version: pre-alfa 930103

Finns att hämta: /ftp@menora.weizmann.ac.il:/pub/lyskom/perlklienten.tar.Z

Status: Knappt användbar.

Programmeringsspråk: Perl.

Kräver: Perl.


Det finns mer att läsa om LysKOM
Nedan följer alla inlägg som berör perlklienten som fortfarande finns kvar i LysKOM. Läs också filen LAES.MIG i distributionen.
267298 1992-11-01  23:28  /157 rader/ Peter Grobgeld
Mottagare: LysKOM; Klientdiskussioner om andra klienter <102>
Markerad av 4 personer.
Ärende: Perl-klient till LysKOM
------------------------------------------------------------
Det är mig en stor är ära att för allmänheten inom kort presentera 
min LysKOM klient skriver i Perl. Den är ännu inte färdig, men grunden 
är byggd. Jag hoppas att jag snart kommer kunna rekrytera ett antal 
frivilliga, för att förbättra och göra färdig denna klient.

Låt mig först beskriva vad mina mål med denna klient är och därefter vad
jag har gjort och vad som återstår.

BAKGRUND

Varför en ny klient?
====================

Till att börja med. Jag är en inbiten Emacs-hatare. Jag har aldrig 
lyckats lära mig att tycka om en editor som kan närapå allt förutom att 
laga kosher mat. En editor är emm (imo på engelska) till för att skriva 
text med. Inte klienter. Dessutom blir jag så väldigt förvirrad av 
Lisp-syntaxen. Det är för många paranteser, och stack registrerna i min 
hjärna tar slut innan jag lyckas stänga den 17:e parantesen.

Allvarligt talat så blev jag väldigt trött att vänta på att Emacs skulle 
bli klar med "Garbage collection" samt att E-lisp-klienten sa åt mig att 
"Vänta" i all evighet. Jag sitter mycket längre bort från servern än de 
flesta av av Lyskoms användare, och responstiden blev oacceptabel.

Jag drömde om en nätt, X-baserad klient där man med hjälp av mus och 
tangentbord snabbt kunde hoppa mellan nya texter, där varje text 
öppnades i ett eget fönster. Men för att kunna skriva en sådan måste man 
ha ett subrutin-bibliotek.

Varför Perl?
============

Perl är ett relativt nytt språk. Språkpuritisterna har skrikit högt om 
det för dess "ickepuristiska" syntax. Men för den som har lärt sig Perl 
har det en enorm charm. Liksom de mänskliga språket så är det 
"redundant" - överdefinierat, vilket dock gör vägen från tanke till kod 
kortare. Dess stränghantering är kraftfullare än något annat språk som 
jag har mött. Det har inbyggt alla rutiner som krävs för tcp/ip 
kommunikation. Samt det är lätt att lägga till nya rutiner, vilket krävs 
för ett projekt som är meningen ska vara ett samarbete mellan många 
olika personer.

Mest av allt var det dock en utmaning. Visst kan man ta linbanan upp 
till Masada-fästningen för att se på utsikten. Men tjusningen är så
mycket större om man klättrar upp till fots.

IMPLEMENTERING

lyskom.pl
=========

Alla lågnivårutiner är instoppade i ett separat Perl paket (packet),
kom, i filen lyskom.pl. Ett av målen med detta paket är att det ska 
"cacha" (lagra i minne) så mycket information som möjligt, så att en 
begäran av information som redan har frågats efter tidigare, inte 
behöver skickas till servern. Ytterligare ett mål är att alla subrutiner 
ska vara så allmänna som möjligt vad det gäller parametrar.

De enda rutinerna som pratar direkt med servern är establishProtocolA 
och rpqList, resten av rutinerna bygger upp sina frågor och anropar 
rpqList för att få svar på dem.
   
Ett problem med Perl är att det inte stöder rekursiva datatyper. 
(Troligtvis kommer rekursiva datatyper att inkluderas i Perl version 
5.0.) Jag har delvis löst detta problem med hjälp av argument-anrop (jag 
är dock inte säker på att tekniken verkligen kallas så. ) Detta kommer 
också att bli vackrare i Perl 5.0 där "=>" kommer att bli ekvilanent med 
ett komma ",".

Ett exempel är get-text-stat. Ett typiskt anrop till get-text-stat 
ser ut så här:
    
    if (! &getTextStat($textNum, 
            author, $author,      #  author => $author,   i Perl 5.0
            nooflines, $nol,
            commin, $cin
         )
       ) ä
        print "Texten $textNum finns inte!\n";
    å
    else ä
        $name= &whois($author);  # Konvertera Pers-No till namn
        print "-----<$textNum>----($nol)";
        print "Av: ($author) $name\n";
        print &getText($textNum);
    å    
          
Tyvärr är denna abstraktion inte tillräcklig för att representera den 
djupt nästade strukturen Membership-list som returneras av 
get-membership. Troligtvis kommer jag att representera den som en array 
med textsträngar, som måste packas upp med en separat rutin.

Asynkrona anrop
===============

När rpqList tar emot ett asynkront anrop så anropar den en rutin som
heter kom'asyncProcess . Denna rutin är inte definierad i lyskom.pl 
filen, utan det är meningen att den ska deklareras i huvudmodulen.

lyskom-k
========

En primitiv tty-klient har också skrivits som kallas lyskom-k (jag 
kallade den för något annat, längre, innan jag överförde den till min 
PC) som anroper lågnivåpaket "kom". 

Följande är de kommandon som tty-klienten stöder än så länge:

   @rpq      skicka en rå rpq och ta emot ett rått svar
   pepsi     byt konferans (borde kalla den Pommac...)
   whois     namnet på en konferans eller person
   gt        get-text
   glt       get-local-text
   gnt       get next local text
   getmap    get-map
   wido      what-i-do
   gcs       get-conf-stat
   
Dessutom så visar den alla asynkrona anrop på skärmen när de anländer,
vilket dock kan sättas av och på med kommandot

   async 0/1

xwafe-lyskom-k
==============

Detta är en mycket tidig X11 wafe-klient som inte kan mycket mer är @rpq 
samt visar de asynkrona meddelandena i en separat widget. (Finns det
någon svensk översättning för widget?)

I mina planer ingår att kunna visa kommentarträd med Athena tree widget.

Andra möjligheter till X-interface
==================================

Det finns flera möjligheter till X-stödda klienter. En möjlighet är
som är nämnt ovan, en klient baserat på paketet "wafe" (Widget Athena 
Front End) eller det annonserade paketet "mofe" (Motif Front End). 
Ytterligare en möjlighet för en X-klient, är om Perl version 5.0 
kommer innehålla X-bindningar, något som har antytts flera gånger i 
comp.lang.perl .

TILL SIST

Jag lovar att göra min klient tillgänglig för anonym ftp inom kort. 
Jag vill bara städa upp i den en aning.

                        *      *       *
                      
Angående min presentation, så har tydligen min mycket gamla försvunnit. 
En dag ska jag skriva en ny.

Hälsningar från ett medelhavsvarmt Rehovot



(267298) -----------------------------------

269101 1992-11-04  22:56  /48 rader/ Peter Grobgeld
Mottagare: LysKOM; Klientdiskussioner om andra klienter <106>
Markerad av 2 personer.
Ärende: Perl-klienten tillgänglig via anonym ftp
------------------------------------------------------------
                            Perl-klienten
                                 av
                            Peter Grobgeld
                   Email: dov@menora.weizmann.ac.il
                       Version: pre-alfa 921104

Tillgänglig via anonym ftp från
   menora.weizmann.ac.il:/pub/lyskom/perlklienten.zip

Perl-klienten är en mycket tidig pre-alfa utgåva av en klient till
lyskom skriven i Perl.

Jag blir hemskt glad om någon vill hjälpa till med att skriva ytterligare
kod, eller bara kommer med tips om förbättringar, eller ett par upp-
skattande ord. :-)

För att använda den så måste du ändra i lyskom-k där det står
  # Konfiguration
och ändra till ditt usernamn och password.

Dessutom måste du ändra första raden så att den pekar på din perl .

De kommandona som klienten stöder är:

    whoison    -  Ge en lista på inloggade
    gms        -  Get membership
    pepsi 999  -  Gå till konferens 999
    gt         -  Get text
    glt        -  Get local text
    gnt        -  Get next (local) text
    msg 999 xxx  -  Skicka ett meddelande till någon
    getmap 999  -  Få mappning av lokal text 999 till global text
    whois 999   -  Kolla vem 999 är
    @rpq        -  Skicka en rå rpq
    lu xxxx     -  Lookup xxxx

    (För en mer komplett lista: "Se såsen Oskar" (Read the Source, Luke) )

Återstår:

   * Fylla i alla funktioner som ännu inte stöds
   * Integrera perlklienten med "GNU like readline" bibliotek för perl

På G:

   * Wafe-klient baserat på lyskom.pl, men under X.


(269101) -----------------------------------
Kommentar i text 269329 av Peter Grobgeld

269329 1992-11-05  14:57  /16 rader/ Peter Grobgeld
Mottagare: LysKOM; Klientdiskussioner om andra klienter <111>
Kommentar till text 269101 av Peter Grobgeld
Markerad av 2 personer.
Ärende: Ärende
------------------------------------------------------------
En ny version av perl-klient är nu tillgänglig via anonym ftp från
menora.weizmann.ac.il:/pub/lyskom .

Ändringar 1992-11-05:

    * Några buggar fixade

    * Lagt till kommandona

         com    Skriv en kommentar till en text
         ct     (create-text) Skapa en ny text i nuvarande konferens
         reply  Skriv ett personligt svar till artikelförfattaren

      Dessa anropar editorn som är definierad i miljövariabeln (environment
      variabeln) EDITOR. Default är 'vi'.

(269329) -----------------------------------

270391 1992-11-08  16:14  /16 rader/ Peter Grobgeld
Mottagare: LysKOM; Klientdiskussioner om andra klienter <144>
Markerad av 1 person.
Ärende: Perl klinten är egentligen en C-klient
------------------------------------------------------------
Jag kom just underfund med att snart så kommer min Perl-klient att bli
en C-klient. Så här något liknande ser den ut i C:

  #include "perl.h"

  main ä
     perl("require 'lyskom-k'");
  å

Och så här kompileras den

  cc -o clyskom-k clyskom-k.c -lperl

Fast vi måste vänta några månader på Perl 5.0 innan det funkar.


(270391) -----------------------------------

285723 1992-12-09  23:43  /19 rader/ Peter Grobgeld
Mottagare: LysKOM; Klientdiskussioner om andra klienter <152>
Markerad av 1 person.
Ärende: Svär-Perlklienten på G
------------------------------------------------------------
Jag har så smått börjat att integrera Perl-klienten med Curses.
Redan nu så är user-interfacet mycket vänligare. T.ex. kan man trycka
^n för att se nästa text. Mellanslag upprepar föregående kommando.
Hoppas kunna släppa denna version om någon dag.

Ha dock inte för stora förhoppningar. Jag är en nybörjare på Curses
programmering. (Om det finns någon som kan det väl och som har lust
att hjälpa till med Perl-klienten, så skicka ett meddelande till mig.)

Än fattas det mycket. T.ex.

    *  En enkel inbyggd editor för att direkt svara på korta brev.
    *  Editering av kommandoraden.
    *  Enklare addering av nya rutiner.





(285723) -----------------------------------
Återse nästa text - 

291597 1992-12-29  15:07  /32 rader/ Peter Grobgeld
Mottagare: LysKOM; Klientdiskussioner om andra klienter <159>
Mottagare: LysKOM (-) Övrigt <824>
Markerad av 1 person.
Ärende: Ny version av perl-klienten
------------------------------------------------------------
Ytterligare ett par små fixar i Perlklienten. Sen förra släppet är
följande fixat/ändrat:

Ändringar 1992-12-29

    *  Fixat svenska rutinerna så att de nu faktiskt fungerar med både 
       svensk Ascii och iso.
       
    *  Gjort funktionen 'g' synonym med 'pepsi' samt lagt till kod för
       att göra en 'look-up' om inte argumentet består helt av siffror.
       Man kan nu alltså skriva 'g fr for' för att gå till 'Fritt Forum'.
       
    *  Fixat alla utskrifter till skärmen så att de filtreras för svenska
       tecken.
       
    *  perl-klienten behöver ej längre använda curseperl, fast den stöder
       det fortfarande och fungerar bättre på en del burkar med curse-
       perl.
       
    *  Perlklienten använder nu en ~/.lyskomkrc fil för att läsa default
       parametrar. 

                             *  *  *
                             
Som förut gäller att jag tar tacksamt emot kommentarer, samt initiativ
till samarbete för att vidareutveckla perlklienten.

Tillgänglig via anonym ftp från
   menora.weizmann.ac.il:/pub/lyskom/perlklienten.zip

Hälsningar från ett soligt Rehovot, Israel

(291597) -----------------------------------
Gå till nästa möte -