Bra svar och frågor till Grudatkursen

Innehåll:
Laborationsrelaterat
(Lab 2) Rita upp din skip-lista!

UNIX-systemet
Kursregistrering
Gemensam katalog
Emacs och XEmacs
XEmacs fungerar inte
Färger i Emacs och XEmacs
Färger alltid
Annan indentering

GNU-Plot -- Jag rekommenderar MATLAB istället
Citat från GNU-Plot FAQ

Java
Kompilera och köra Java-program
Dokumentation och klassbibliotek
Enkel javatutorial
Tolka strängar som tal
Läsa en fil
Expanderbara arrayer

Laborationsrelaterat

(Lab 2) Rita upp din skip-lista!

Det finns ett litet program som kan rita upp en bild av en skiplista. Det kan vara användbart om man vill hitta fel i programmet, eller kontrollera att alla referenser går till rätt plats. Programmet samt manual finns *här*.

UNIX-systemet

Kursregistrering

För att registrera sig på kursen måste man köra två kommandon i terminalfönstret:
dator> course join grudat01
Genomför en kursregistrering. Hemsidan med vilka Nadakurser man går uppdateras uppdateras. Kursmodulen laddas in.

dator> res checkin grudat01
Registrerar användaren i resultatrapporteringssystemet res.

Gemensam katalog

Vill man i labgruppen vill ha en gemensam katalog kan man göra så här:
dator> course labdir grudat01 <labkompis>
En katalog med namn grudat01 skapas, och den personen med det angivna användarnamnet får läs- och skrivrättigheter till den. Labkamraten bör göra samma sak inloggad som sig (i detta fall blir labkompis den första personens användarnamn). Då får han/hon en länk från sin hemkatalog till den gemensamma katalogen.

-- Överkursvariant --
dator>fs sa <katalog> <användare> rlidwk
Ger en användare rättigheter att läsa och skriva i en katalog. Vill man endast dela ut läsrättigheter byts rlidwk mot rl.

dator> ln -s <målkatalog> <länknamn>
Skapar en länk en länk med namn länknamn till målkatalog. Om användaren f96-top har gett dig rättigheter till skräp i hans hemkatalog, kan du göra en länk dit med följande kommando: ln -s ~f96-top/skräp skräp

Emacs och XEmacs

XEmacs fungerar inte
Lägg till modulen xemacs med kommandot module add xemacs. Vill man att modulen alltid ska laddas när man loggar in (från och med nästa gång) skriver man istället module initadd xemacs. XEmacs startas med kommandot xemacs &.

Färger i Emacs och XEmacs
Färger fås i Emacs genom att man i menyerna väljer Help -->Options -->Global Font Lock.

I XEmacs ser menyerna annorlunda ut. Där väljs istället Options -->Syntax Highlighting -->Automatic och därefter ... -->Colors. I "Options"-menyn kan man också välja hur parentesmatchning ska visas.

Färger alltid
Vill man att färgerna ska komma automatiskt varje gång Emacs eller XEmacs startas, kan man lägga till följande kod till filen .emacs i hemkatalogen:
;; Syntax highlighing
(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)

Annan indentering
Man kan ändra till ett annat indenteringsdjup i Emacs och XEmacs än det förinställda genom att lägga nedanstående rader till sin .emacs i hemkatlogen:
      ;; Set indentation step to 2 spaces per level
      (setq c-basic-offset 2)
      (add-hook 'java-mode-hook
		'(lambda () (setq c-basic-offset 2)))

GNU-Plot -- Jag rekommenderar MATLAB istället

Det står i laborationsandledning att man kan använda GNU-Plot för att rita grafer. De flesta har ju tidigare plottat en el hdel med MATLAB, så jag rekommenderar det i stället. För den som vcerkligen vill finns nedan ett utdrag ur en FAQ om GNU-Plot. Cictatet beskriver ur man kan generera en PostScript-fil att inkludera i en rapport eller skriva ut.

Citat från GNU-Plot FAQ
Stycket nedan är hämtat från www.ucc.ie/gnuplot/gnuplot-faq.html.

3.2 How do I print out my graphs? The kind of output produced is determined by the 'set terminal' command; for example, 'set terminal postscript' will produce the graph in PostScript format. Output can be redirected using the 'set output' command. As an example, the following prints out a graph of sin(x) on a Unix machine running the X-Window System.

gnuplot> plot [-6:6] sin(x)
gnuplot> set terminal postscript
Terminal type set to 'postscript'
Options are 'landscape monochrome "Courier" 14'
gnuplot> set output "sin.ps"
gnuplot> replot
gnuplot> set output              # set output back to default
gnuplot> set terminal x11        # ditto for terminal type
gnuplot> ! lp -ops sin.ps        # print PS File (site dependent)
request id is lprint-3433 (standard input)
lp: printed file sin.ps on fg20.rz.uni-karlsruhe.de (5068 Byte)
!
gnuplot>

Java

Kompilera och köra Java-program

Om det finns ett javaprogram i filen Hejsan.java kan det kompileras med kommandot:
dator> javac Hejsan.java
Glöm inte att spara filen innan du kompilerar!

Om kompilatorn klagar på att den inte hittar filen kan det vara för att den startades i fel katalog. Kommandot pwd berättar vilken katalog man står i. ls listar vilka filer som finns där. Med cd <katalognamn> byter aktuell katalog till katalognamn. Med cd .. kommer man en nivå upp i kataloghierarkin. Endast cd tar dig till din hemkatalog.

Om filen Hejsan.java innehåller en klass Hejsan med en main-metod, kan det kompilerade programmet köras med:

dator> java Hejsan
Om det inte fungerar, kontrollera att main är deklarerad på rätt sätt (" public static void main(String[] args) "). Andra vanliga fel är att kompilatorn gav ett felmeddelande. Då måste programmet rättas och kompileras om. Om Java klagar på klassen inte finns, kontrollera att det finns en fil med namn Hejsan.class (se kommentaren om kataloger ovan).

Dokumentation och klassbibliotek

Det finns en hemsida där alla inbyggda klasser och paket finns beskrivna. Där kan man lätt slå upp vilka metoder som finns i en given klass, och läsa om hur de fungerar. Länkar till dokumentationen finns nedan.
Båda versionerna duger utmärkt för denna kurs. Den absolut senaste informationen återfinns på SUNs hemsida (det är SUN som uppfunnit och utvecklar Java).

Enkel javatutorial

Det finns en samling med inledande uppgifter som man kan göra för att återuppväcka gamla javakunskaper. Dessa återfinns via kursens laborationshemsida Till dessa uppgifter finns också lösningar som man kan kika på för att få tips och idéer.

Tolka strängar som tal

Följande kod fungerar och gör det man förväntar sig:
   .
   .
String heltal="4936", flyttal="1.4142";
int i = Integer.parseInt(heltal);
double d = Double.parseDouble(flyttal);
   .
   .
Detta kan till exempel användas när man vill tolka argument på kommandoraden.

Läsa en fil

Här kommer ett exempel som läser in en fil rad för rad, och skriver ut den med radnummer. (Ladda ner koden: LineNumber.java)
import java.io.*;

class LineNumber {
  public static void main(String[] args) throws IOException {
    String filename = "LineNumber.java";
    BufferedReader file = new BufferedReader(new FileReader(filename));
    
    int radnr = 1;
    String line = file.readLine();
    while(line != null) {
      System.out.println(radnr + ". " + line);
      line = file.readLine();
      radnr++;
    }
  }
}
Tolka programmet så här: En FileReader kan öppna och hålla rätt på en fil. En BufferedReader kan läsa rader från en öppnad fil. Satsen
BufferedReader file = new BufferedReader(new FileReader(filename));
öppnar alltså en fil, och skapar ett objekt som kan läsa den rad för rad. Varje gång file.readLine() anropas läses nästa rad som ännu inte lästs. När filen tar slut returneras null från readLine().

Mer kan läsas i javadokumnetationen.

Expanderbara arrayer

Klassen ArrayList representerar en array som ändra sin storlek alltefter hur många element som behövs. För att använda sig av denna klass måste man importera java.util.*. Om man vill lägga till ett element sist i en ArrayList användas metoden add(o), där o är det objekt som ska läggas till. Att se vad som finns på index i kan göras med metoden get(i). get returnerar ett Object som måste typkonverteras till den typ som önskas (till exempel String eller Comparable). Att ändra det som finns på plats i till o görs med set(i, o). Antal element i en ArrayList ges av ett anrop till size().

En ny och tom expanderbar vektor skapas med:

ArrayList v = new ArrayList()
Alla metoder och beskrivningar av hur de fungerar finns i javadokumentationen.


Senast ändrad 2001-12-05 av Tomas Oppelstrup